| 1 | import { useAuth, useClerk } from "@clerk/react"; |
| 2 | import { useEffect } from "react"; |
| 3 | |
| 4 | import { isElectron } from "../env"; |
| 5 | import { useEnvironments } from "../state/environments"; |
| 6 | import { resolveClerkSignInProps } from "../components/clerk/authRedirect"; |
| 7 | import { |
| 8 | activateCloudAuthentication, |
| 9 | finishCloudSignInRequest, |
| 10 | useCloudAuthentication, |
| 11 | } from "./activation"; |
| 12 | import { CloudAuthBoundary } from "./CloudAuthBoundary"; |
| 13 | import { ManagedRelayAuthProvider } from "./managedAuth"; |
| 14 | |
| 15 | export 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 | |
| 30 | function 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 | } |