- Introduced a new module for Convex client configuration in `src/modules/convex.ts`. - Implemented an authentication token fetcher to manage user tokens. - Integrated the Convex client into the AuthProvider component in `src/pages/auth/index.tsx`.
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { api } from "@kevisual/convex";
|
|
import { ConvexClient, AuthTokenFetcher, ConvexHttpClient } from "convex/browser";
|
|
const url = localStorage.getItem("CONVEX_URL") || 'https://convex.kevisual.cn'
|
|
const client = new ConvexClient(url!);
|
|
const httpClient = new ConvexHttpClient(url!);
|
|
export const initConvex = async () => {
|
|
const getToken = async () => {
|
|
const token = localStorage.getItem("token");
|
|
if (!token) {
|
|
return null;
|
|
}
|
|
const res = await httpClient.action(api.token.create, { token: token! });
|
|
if (res.code === 200) {
|
|
return res.data.accessToken;
|
|
}
|
|
return null;
|
|
}
|
|
const authTokenFetcher: AuthTokenFetcher = async ({ forceRefreshToken }: { forceRefreshToken: boolean }) => {
|
|
console.log("AuthTokenFetcher called, forceRefreshToken:", forceRefreshToken);
|
|
if (forceRefreshToken) {
|
|
const token = await getToken();
|
|
// console.log("fetch got token:", token);
|
|
return token;
|
|
}
|
|
return null;
|
|
}
|
|
client.setAuth(authTokenFetcher, (isAuthenticated) => {
|
|
console.log("Auth isAuthenticated:", isAuthenticated);
|
|
});
|
|
}
|
|
|
|
export { client, httpClient }; |