public commit

This commit is contained in:
dswbx
2024-11-16 12:01:47 +01:00
commit 90f80c4280
582 changed files with 49291 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
import { Api } from "Api";
import type { AuthResponse } from "auth";
import type { AppAuthSchema } from "auth/auth-schema";
import type { ApiResponse } from "modules/ModuleApi";
import { useEffect, useState } from "react";
import {
createClient,
createOrUseClient,
queryClient,
useBaseUrl,
useClient
} from "../../ClientProvider";
type LoginData = {
email: string;
password: string;
[key: string]: any;
};
type UseAuth = {
data: (AuthResponse & { verified: boolean }) | undefined;
user: AuthResponse["user"] | undefined;
token: AuthResponse["token"] | undefined;
verified: boolean;
login: (data: LoginData) => Promise<ApiResponse<AuthResponse>>;
register: (data: LoginData) => Promise<ApiResponse<AuthResponse>>;
logout: () => void;
verify: () => void;
setToken: (token: string) => void;
};
// @todo: needs to use a specific auth endpoint to get strategy information
export const useAuth = (options?: { baseUrl?: string }): UseAuth => {
const ctxBaseUrl = useBaseUrl();
//const client = useClient();
const client = createOrUseClient(options?.baseUrl ? options?.baseUrl : ctxBaseUrl);
const authState = client.auth().state();
const [authData, setAuthData] = useState<UseAuth["data"]>(authState);
const verified = authState?.verified ?? false;
async function login(input: LoginData) {
const res = await client.auth().login(input);
if (res.res.ok && res.data && "user" in res.data) {
setAuthData(res.data);
}
return res;
}
async function register(input: LoginData) {
const res = await client.auth().register(input);
if (res.res.ok && res.data && "user" in res.data) {
setAuthData(res.data);
}
return res;
}
function setToken(token: string) {
setAuthData(client.auth().setToken(token) as any);
}
async function logout() {
await client.auth().logout();
setAuthData(undefined);
queryClient.clear();
}
async function verify() {
await client.auth().verify();
setAuthData(client.auth().state());
}
return {
data: authData,
user: authData?.user,
token: authData?.token,
verified,
login,
register,
logout,
setToken,
verify
};
};
export const useAuthStrategies = (options?: { baseUrl?: string }): {
strategies: AppAuthSchema["strategies"];
loading: boolean;
} => {
const [strategies, setStrategies] = useState<AppAuthSchema["strategies"]>();
const ctxBaseUrl = useBaseUrl();
const api = new Api({
host: options?.baseUrl ? options?.baseUrl : ctxBaseUrl,
tokenStorage: "localStorage"
});
useEffect(() => {
(async () => {
const res = await api.auth.strategies();
console.log("res", res);
if (res.res.ok) {
setStrategies(res.body.strategies);
}
})();
}, [options?.baseUrl]);
return { strategies, loading: !strategies };
};