Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 38 lines 1.2 kB view raw
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();