Add useAuth hook, fix soapboxAuthSchema

environments/review-auth-ljf7a4/deployments/4896
Alex Gleason 2024-10-12 19:17:09 -05:00
rodzic 02d599beab
commit d69d582a38
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 7211D1F99744FBB7
2 zmienionych plików z 37 dodań i 6 usunięć

Wyświetl plik

@ -0,0 +1,31 @@
import { useMemo } from 'react';
import { SoapboxAuth, soapboxAuthSchema, AuthUser } from 'soapbox/schemas/soapbox/soapbox-auth';
import { Token } from 'soapbox/schemas/token';
import { useAppSelector } from './useAppSelector';
export function useAuth() {
const raw = useAppSelector((state) => state.auth);
const data = useMemo<SoapboxAuth>(() => {
try {
return soapboxAuthSchema.parse(raw.toJS());
} catch {
return { tokens: {}, users: {} };
}
}, [raw]);
const users = useMemo<AuthUser[]>(() => Object.values(data.users), []);
const tokens = useMemo<Token[]>(() => Object.values(data.tokens), []);
const user = data.me ? data.users[data.me] : undefined;
return {
users,
tokens,
accountId: user?.id,
accountUrl: user?.url,
accessToken: user?.access_token,
};
}

Wyświetl plik

@ -1,7 +1,6 @@
import { z } from 'zod';
import { tokenSchema } from 'soapbox/schemas/token';
import { coerceObject, filteredArray } from 'soapbox/schemas/utils';
const authUserSchema = z.object({
access_token: z.string(),
@ -9,12 +8,13 @@ const authUserSchema = z.object({
url: z.string().url(),
});
const soapboxAuthSchema = coerceObject({
tokens: filteredArray(tokenSchema),
users: filteredArray(authUserSchema),
me: z.string().url().nullable().catch(null),
const soapboxAuthSchema = z.object({
tokens: z.record(z.string(), tokenSchema),
users: z.record(z.string(), authUserSchema),
me: z.string().url().optional().catch(undefined),
});
type AuthUser = z.infer<typeof authUserSchema>;
type SoapboxAuth = z.infer<typeof soapboxAuthSchema>;
export { soapboxAuthSchema, SoapboxAuth };
export { soapboxAuthSchema, SoapboxAuth, authUserSchema, AuthUser };