refactor(client): use generated API client and hooks
Signed-off-by: Noa Virellia <noa@requiem.garden>
This commit is contained in:
63
client/cms/src/lib/client.ts
Normal file
63
client/cms/src/lib/client.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import {
|
||||
getToken,
|
||||
getRefreshToken,
|
||||
setToken,
|
||||
setRefreshToken,
|
||||
clearTokens,
|
||||
doRefreshToken
|
||||
} from "./token";
|
||||
import { router } from "./router";
|
||||
import { isEmpty,
|
||||
isNil } from "lodash-es";
|
||||
import { client } from "@/client/client.gen";
|
||||
|
||||
export function configInternalApiClient() {
|
||||
client.setConfig({
|
||||
baseUrl: '/api/v1/',
|
||||
headers: {
|
||||
'X-Api-Version': 'latest',
|
||||
},
|
||||
});
|
||||
|
||||
client.interceptors.request.use((request) => {
|
||||
const token = getToken();
|
||||
if (token) {
|
||||
request.headers.set('Authorization', `Bearer ${token}`);
|
||||
}
|
||||
return request;
|
||||
});
|
||||
|
||||
client.interceptors.response.use(async (response, request, options) => {
|
||||
if (response.status === 401) {
|
||||
const refreshToken = getRefreshToken();
|
||||
// Avoid infinite loop if the refresh token request itself fails
|
||||
if (!request.url.includes('/auth/refresh') && !isNil(refreshToken)) {
|
||||
try {
|
||||
const refreshResponse = await doRefreshToken();
|
||||
if (!isEmpty(refreshResponse)) {
|
||||
const { access_token, refresh_token } = refreshResponse;
|
||||
setToken(access_token!);
|
||||
setRefreshToken(refresh_token!);
|
||||
|
||||
const fetchFn = options.fetch ?? globalThis.fetch;
|
||||
const headers = new Headers(request.headers);
|
||||
headers.set('Authorization', `Bearer ${access_token}`);
|
||||
|
||||
return fetchFn(request.url, {
|
||||
method: request.method,
|
||||
headers,
|
||||
body: (options.serializedBody ?? options.body) as BodyInit | null | undefined,
|
||||
signal: request.signal,
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
clearTokens();
|
||||
await router.navigate({ to: '/authorize' });
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
||||
return response;
|
||||
});
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user