1import { useAuth, useClerk } from "@clerk/react";
2import { useEffect } from "react";
3
4import { isElectron } from "../env";
5import { useEnvironments } from "../state/environments";
6import { resolveClerkSignInProps } from "../components/clerk/authRedirect";
7import {
8 activateCloudAuthentication,
9 finishCloudSignInRequest,
10 useCloudAuthentication,
11} from "./activation";
12import { CloudAuthBoundary } from "./CloudAuthBoundary";
13import { ManagedRelayAuthProvider } from "./managedAuth";
14
15export function CloudAuthentication() {
16 const { environments } = useEnvironments();
17 const savedRelay = environments.some((environment) => environment.relayManaged);
18 useEffect(() => {
19 if (savedRelay) activateCloudAuthentication();
20 }, [savedRelay]);
21 return (
22 <CloudAuthBoundary>
23 <ManagedRelayAuthProvider>
24 <SignInRequest />
25 </ManagedRelayAuthProvider>
26 </CloudAuthBoundary>
27 );
28}
29
30function SignInRequest() {
31 const { isLoaded, isSignedIn } = useAuth();
32 const clerk = useClerk();
33 const { signInRequested } = useCloudAuthentication();
34 useEffect(() => {
35 if (!isLoaded || !signInRequested) return;
36 finishCloudSignInRequest();
37 if (!isSignedIn) clerk.openSignIn(resolveClerkSignInProps(window.location.href, isElectron));
38 }, [clerk, isLoaded, isSignedIn, signInRequested]);
39 return null;
40}