Files
AFFiNE-Mirror/packages/data-center/src/provider/affine/apis/request.ts
2023-02-16 21:02:10 -06:00

60 lines
1.3 KiB
TypeScript

import ky from 'ky-universal';
import { MessageCenter } from '../../../message';
import { auth } from './auth';
type KyInstance = typeof ky;
const messageCenter = MessageCenter.getInstance();
const _sendMessage = messageCenter.getMessageSender('affine');
export const bareClient: KyInstance = ky.extend({
prefixUrl: '/',
retry: 1,
// todo: report timeout error
timeout: 60000,
hooks: {
beforeError: [
error => {
const { response } = error;
if (response.status === 401) {
_sendMessage(MessageCenter.messageCode.noPermission);
}
return error;
},
],
},
});
const refreshTokenIfExpired = async () => {
if (auth.isLogin && auth.isExpired) {
try {
await auth.refreshToken();
} catch (err) {
return new Response('Unauthorized', { status: 401 });
}
}
};
export const client: KyInstance = bareClient.extend({
hooks: {
beforeRequest: [
async request => {
if (auth.isLogin) {
await refreshTokenIfExpired();
request.headers.set('Authorization', auth.token);
} else {
return new Response('Unauthorized', { status: 401 });
}
},
],
beforeRetry: [
async ({ request }) => {
await refreshTokenIfExpired();
request.headers.set('Authorization', auth.token);
},
],
},
});