40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
'use client';
|
|
|
|
import { useEffect } from 'react';
|
|
import { syncFedcmSession } from '@/lib/api';
|
|
import { DEFAULT_PUBLIC_API_URL } from '@/lib/project-domains';
|
|
|
|
/** Синхронизирует FedCM cookie и Login Status API на origin API-домена (login_url). */
|
|
export function FedcmApiLoginStatusBridge({
|
|
active,
|
|
accessToken,
|
|
publicApiUrl = DEFAULT_PUBLIC_API_URL
|
|
}: {
|
|
active: boolean;
|
|
accessToken?: string | null;
|
|
publicApiUrl?: string;
|
|
}) {
|
|
useEffect(() => {
|
|
if (!active || !accessToken) return;
|
|
void syncFedcmSession(accessToken);
|
|
}, [accessToken, active]);
|
|
|
|
useEffect(() => {
|
|
if (!active) return;
|
|
const apiBase = publicApiUrl.replace(/\/+$/, '');
|
|
if (!apiBase) return;
|
|
|
|
const iframe = document.createElement('iframe');
|
|
iframe.hidden = true;
|
|
iframe.title = 'FedCM login status';
|
|
iframe.src = `${apiBase}/fedcm/login-status`;
|
|
document.body.appendChild(iframe);
|
|
|
|
return () => {
|
|
iframe.remove();
|
|
};
|
|
}, [active, publicApiUrl]);
|
|
|
|
return null;
|
|
}
|