@alauda/doom
Version:
Doctor Doom making docs.
38 lines (37 loc) • 1.23 kB
JavaScript
import { useCallback, useSyncExternalStore } from 'react';
import { CLOUD_AUTH_TOKEN_KEY } from './constants.js';
import { getAuthInfoFromToken, setLocalStorage } from './utils.js';
export const getCloudAuth = () => {
if (typeof localStorage === 'undefined') {
return null;
}
const token = localStorage.getItem(CLOUD_AUTH_TOKEN_KEY);
if (token == null) {
return null;
}
return { token, detail: getAuthInfoFromToken(token) };
};
let authInfo = getCloudAuth();
const subscribe = (onStoreChange) => {
const listener = (_ev) => {
const ev = _ev;
setLocalStorage(CLOUD_AUTH_TOKEN_KEY, ev.detail);
authInfo = getCloudAuth();
onStoreChange();
};
document.addEventListener('cloud-auth-change', listener);
return () => {
document.removeEventListener('cloud-auth-change', listener);
};
};
const getSnapshot = () => authInfo;
export const useCloudAuth = () => {
const authInfo = useSyncExternalStore(subscribe, getSnapshot);
const setAuthBasic = useCallback((token) => {
document.dispatchEvent(new CustomEvent('cloud-auth-change', { detail: token }));
}, []);
return {
authInfo,
setAuthBasic,
};
};