Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
1import { Localstorage } from "@hey/data/storage";
2import clearLocalStorage from "@/helpers/clearLocalStorage";
3import { createPersistedTrackedStore } from "@/store/createTrackedStore";
4
5interface Tokens {
6 accessToken: null | string;
7 refreshToken: null | string;
8}
9
10interface State {
11 accessToken: Tokens["accessToken"];
12 hydrateAuthTokens: () => Tokens;
13 refreshToken: Tokens["refreshToken"];
14 signIn: (tokens: { accessToken: string; refreshToken: string }) => void;
15 signOut: () => void;
16}
17
18const { store } = createPersistedTrackedStore<State>(
19 (set, get) => ({
20 accessToken: null,
21 hydrateAuthTokens: () => {
22 const { accessToken, refreshToken } = get();
23 return { accessToken, refreshToken };
24 },
25 refreshToken: null,
26 signIn: ({ accessToken, refreshToken }) =>
27 set({ accessToken, refreshToken }),
28 signOut: async () => {
29 clearLocalStorage();
30 }
31 }),
32 { name: Localstorage.AuthStore }
33);
34
35export const signIn = (tokens: { accessToken: string; refreshToken: string }) =>
36 store.getState().signIn(tokens);
37export const signOut = () => store.getState().signOut();
38export const hydrateAuthTokens = () => store.getState().hydrateAuthTokens();