Compare commits
No commits in common. "2bf268cbef0672eadd7fe2cbae4a87ae54b1b910" and "27acfab0cda4cdb50df388a63f6bc86142d730c8" have entirely different histories.
2bf268cbef
...
27acfab0cd
1 changed files with 23 additions and 25 deletions
|
|
@ -10,13 +10,15 @@ async function getRefreshed(): Promise<boolean> {
|
||||||
if (!refreshPromise) {
|
if (!refreshPromise) {
|
||||||
refreshPromise = (async () => {
|
refreshPromise = (async () => {
|
||||||
try {
|
try {
|
||||||
const res = await refreshTokens({ throwOnError: true });
|
const res = await refreshTokens();
|
||||||
|
// consider refresh successful if res.data exists
|
||||||
return !!res.data;
|
return !!res.data;
|
||||||
} catch {
|
} catch (err) {
|
||||||
return false;
|
return false; // failed to refresh
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
return refreshPromise;
|
return refreshPromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -25,33 +27,29 @@ const baseClient = createClient(createConfig<ClientOptions2>({ baseUrl: '/api/v1
|
||||||
export const authClient: Client = {
|
export const authClient: Client = {
|
||||||
...baseClient,
|
...baseClient,
|
||||||
|
|
||||||
// Force the function to match the expected signature exactly
|
request: function <
|
||||||
request: (async <
|
|
||||||
TData = unknown,
|
TData = unknown,
|
||||||
TError = unknown,
|
TError = unknown,
|
||||||
ThrowOnError extends boolean = false,
|
ThrowOnError extends boolean = true,
|
||||||
TResponseStyle extends ResponseStyle = 'fields',
|
TResponseStyle extends ResponseStyle = 'fields',
|
||||||
>(
|
>(
|
||||||
options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'> &
|
options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'> &
|
||||||
Pick<Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>, 'method'>
|
Pick<Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>, 'method'>
|
||||||
): Promise<RequestResult<TData, TError, ThrowOnError, TResponseStyle>> => {
|
): RequestResult<TData, TError, ThrowOnError, TResponseStyle> {
|
||||||
|
|
||||||
// Initial request
|
// Wrap logic inside a Promise to satisfy RequestResult type
|
||||||
let result = await baseClient.request<TData, TError, ThrowOnError, TResponseStyle>(options);
|
return baseClient.request<TData, TError, ThrowOnError, TResponseStyle>(options).catch(async (err: any) => {
|
||||||
|
if (err?.status === 401) {
|
||||||
// Check for 401
|
const refreshed = await getRefreshed();
|
||||||
if ((result as any)?.error?.response?.status === 401) {
|
if (!refreshed) {
|
||||||
const refreshed = await getRefreshed();
|
localStorage.clear();
|
||||||
|
window.location.href = "/login";
|
||||||
if (refreshed) {
|
throw err;
|
||||||
// Retry
|
}
|
||||||
result = await baseClient.request<TData, TError, ThrowOnError, TResponseStyle>(options);
|
// Retry original request
|
||||||
} else {
|
return baseClient.request<TData, TError, ThrowOnError, TResponseStyle>(options);
|
||||||
localStorage.clear();
|
|
||||||
window.location.href = "/login";
|
|
||||||
}
|
}
|
||||||
}
|
throw err;
|
||||||
|
}) as RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
|
||||||
return result as RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
|
},
|
||||||
}) as Client['request'], // Cast the function itself to match the Client interface
|
|
||||||
};
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue