mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-26 21:39:43 +02:00
fix(zero):refresh authenticated zero context
This commit is contained in:
parent
c8ac7d3fa6
commit
0ef8a0f2c9
3 changed files with 26 additions and 19 deletions
|
|
@ -7,15 +7,11 @@ import {
|
|||
} from "@rocicorp/zero/react";
|
||||
import { useAtomValue } from "jotai";
|
||||
import { usePathname } from "next/navigation";
|
||||
import { useEffect, useMemo } from "react";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { currentUserAtom } from "@/atoms/user/user-query.atoms";
|
||||
import { useSession } from "@/hooks/use-session";
|
||||
import {
|
||||
getBearerToken,
|
||||
handleUnauthorized,
|
||||
isPublicRoute,
|
||||
refreshAccessToken,
|
||||
} from "@/lib/auth-utils";
|
||||
import { getDesktopAccessToken } from "@/lib/auth-fetch";
|
||||
import { handleUnauthorized, isPublicRoute, refreshSession } from "@/lib/auth-utils";
|
||||
import { queries } from "@/zero/queries";
|
||||
import { schema } from "@/zero/schema";
|
||||
|
||||
|
|
@ -36,13 +32,18 @@ function ZeroAuthSync({ isDesktop }: { isDesktop: boolean }) {
|
|||
useEffect(() => {
|
||||
if (connectionState.name !== "needs-auth") return;
|
||||
|
||||
refreshAccessToken().then((newToken) => {
|
||||
if (!newToken) {
|
||||
refreshSession().then(async (refreshed) => {
|
||||
if (!refreshed) {
|
||||
handleUnauthorized();
|
||||
return;
|
||||
}
|
||||
|
||||
if (isDesktop) {
|
||||
const newToken = await getDesktopAccessToken();
|
||||
if (!newToken) {
|
||||
handleUnauthorized();
|
||||
return;
|
||||
}
|
||||
zero.connection.connect({ auth: newToken });
|
||||
} else {
|
||||
zero.connection.connect();
|
||||
|
|
@ -95,9 +96,20 @@ function ZeroClientProvider({
|
|||
isDesktop: boolean;
|
||||
}) {
|
||||
const cacheURL = useMemo(() => getCacheURL(), []);
|
||||
const auth = isDesktop ? getBearerToken() || undefined : undefined;
|
||||
const [desktopAuth, setDesktopAuth] = useState<string | undefined>(undefined);
|
||||
const context = useMemo(() => ({ userId: userID }), [userID]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isDesktop) return;
|
||||
let isMounted = true;
|
||||
getDesktopAccessToken().then((token) => {
|
||||
if (isMounted) setDesktopAuth(token || undefined);
|
||||
});
|
||||
return () => {
|
||||
isMounted = false;
|
||||
};
|
||||
}, [isDesktop]);
|
||||
|
||||
const opts = useMemo(
|
||||
() => ({
|
||||
userID,
|
||||
|
|
@ -105,9 +117,9 @@ function ZeroClientProvider({
|
|||
queries,
|
||||
context,
|
||||
cacheURL,
|
||||
auth,
|
||||
auth: isDesktop ? desktopAuth : undefined,
|
||||
}),
|
||||
[userID, context, cacheURL, auth]
|
||||
[userID, context, cacheURL, isDesktop, desktopAuth]
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue