mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 20:38:52 +00:00
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import { DebugLogger } from '@affine/debug';
|
|
import {
|
|
getLoginStorage,
|
|
isExpired,
|
|
parseIdToken,
|
|
setLoginStorage,
|
|
storageChangeSlot,
|
|
} from '@affine/workspace/affine/login';
|
|
import useSWR from 'swr';
|
|
|
|
import { affineAuth } from '../../shared/apis';
|
|
|
|
const logger = new DebugLogger('auth-token');
|
|
|
|
const revalidate = async () => {
|
|
const storage = getLoginStorage();
|
|
if (storage) {
|
|
try {
|
|
const tokenMessage = parseIdToken(storage.token);
|
|
logger.debug('revalidate affine user');
|
|
if (isExpired(tokenMessage)) {
|
|
logger.debug('need to refresh token');
|
|
const response = await affineAuth.refreshToken(storage);
|
|
if (response) {
|
|
setLoginStorage(response);
|
|
storageChangeSlot.emit();
|
|
}
|
|
}
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
export function useAffineRefreshAuthToken(
|
|
// every 30 seconds, check if the token is expired
|
|
refreshInterval = 30 * 1000
|
|
) {
|
|
const { data } = useSWR<boolean>('autoRefreshToken', {
|
|
suspense: true,
|
|
fetcher: revalidate,
|
|
refreshInterval,
|
|
revalidateOnFocus: true,
|
|
revalidateOnReconnect: true,
|
|
revalidateOnMount: true,
|
|
});
|
|
return data;
|
|
}
|