fix mini app bot father
This commit is contained in:
@@ -13,7 +13,9 @@ import {
|
||||
fetchBotChatMessages,
|
||||
sendBotMessage
|
||||
} from '@/lib/api';
|
||||
import { postEmbeddedAuthToIframe } from '@/lib/embedded-auth-bridge';
|
||||
import { postEmbeddedAuthToIframe, EMBEDDED_AUTH_REQUEST } from '@/lib/embedded-auth-bridge';
|
||||
import { AUTH_REFRESH_KEY, AUTH_SESSION_KEY, AUTH_TOKEN_KEY } from '@/lib/api';
|
||||
import { normalizeMiniAppUrl, resolveMiniAppTargetOrigin } from '@/lib/mini-app-url';
|
||||
import { extractMessageReplyMarkup, serializeInlineKeyboardMarkup } from '@/lib/bot-reply-markup';
|
||||
import { resolveComposerMenuButton, type ComposerMenuButton } from '@/lib/bot-menu-button';
|
||||
import { cn } from '@/lib/utils';
|
||||
@@ -305,27 +307,44 @@ export function BotMiniAppSheet({
|
||||
onClose
|
||||
}: BotMiniAppSheetProps) {
|
||||
const iframeRef = useRef<HTMLIFrameElement>(null);
|
||||
const normalizedUrl = url ? normalizeMiniAppUrl(url) : null;
|
||||
const resolvedAuthToken =
|
||||
authToken ?? (typeof window !== 'undefined' ? window.localStorage.getItem(AUTH_TOKEN_KEY) : null);
|
||||
|
||||
const pushAuthToIframe = useCallback(() => {
|
||||
if (!iframeRef.current || !authToken) return;
|
||||
if (!iframeRef.current || !resolvedAuthToken) return;
|
||||
postEmbeddedAuthToIframe(iframeRef.current, {
|
||||
token: authToken,
|
||||
refreshToken: authRefreshToken,
|
||||
sessionId: authSessionId
|
||||
token: resolvedAuthToken,
|
||||
refreshToken: authRefreshToken ?? window.localStorage.getItem(AUTH_REFRESH_KEY),
|
||||
sessionId: authSessionId ?? window.localStorage.getItem(AUTH_SESSION_KEY)
|
||||
});
|
||||
}, [authRefreshToken, authSessionId, authToken]);
|
||||
}, [authRefreshToken, authSessionId, resolvedAuthToken]);
|
||||
|
||||
useEffect(() => {
|
||||
function handleMessage(event: MessageEvent) {
|
||||
if (event.origin !== window.location.origin) return;
|
||||
if (event.data?.type !== 'lendry-id-embedded-auth-request') return;
|
||||
const iframeOrigin = iframeRef.current
|
||||
? resolveMiniAppTargetOrigin(iframeRef.current.getAttribute('src') || iframeRef.current.src, window.location.origin)
|
||||
: window.location.origin;
|
||||
if (event.origin !== iframeOrigin && event.origin !== window.location.origin) return;
|
||||
if (event.data?.type !== EMBEDDED_AUTH_REQUEST) return;
|
||||
pushAuthToIframe();
|
||||
}
|
||||
window.addEventListener('message', handleMessage);
|
||||
return () => window.removeEventListener('message', handleMessage);
|
||||
}, [pushAuthToIframe]);
|
||||
|
||||
if (!url) return null;
|
||||
useEffect(() => {
|
||||
if (!normalizedUrl || !resolvedAuthToken) return;
|
||||
pushAuthToIframe();
|
||||
const interval = window.setInterval(pushAuthToIframe, 350);
|
||||
const timeout = window.setTimeout(() => window.clearInterval(interval), 3500);
|
||||
return () => {
|
||||
window.clearInterval(interval);
|
||||
window.clearTimeout(timeout);
|
||||
};
|
||||
}, [normalizedUrl, pushAuthToIframe, resolvedAuthToken]);
|
||||
|
||||
if (!normalizedUrl) return null;
|
||||
return (
|
||||
<div className="fixed inset-0 z-[70] flex items-end justify-center bg-black/40 p-4 sm:items-center">
|
||||
<div className="flex h-[min(88vh,720px)] w-full max-w-[520px] flex-col overflow-hidden rounded-[24px] bg-white shadow-2xl">
|
||||
@@ -337,7 +356,7 @@ export function BotMiniAppSheet({
|
||||
</div>
|
||||
<iframe
|
||||
ref={iframeRef}
|
||||
src={url}
|
||||
src={normalizedUrl}
|
||||
title={title}
|
||||
className="min-h-0 flex-1 border-0"
|
||||
allow="clipboard-read; clipboard-write"
|
||||
|
||||
Reference in New Issue
Block a user