type Request = Parameters<typeof $fetch>[0];
type ExtendedFetchOptions = Parameters<typeof $fetch>[1] & {
authToken: string;
refreshTokens: () => Promise<string>;
};
export default async function authorizedRequest<T>(
request: Request,
options: ExtendedFetchOptions,
): Promise<API_Response<T>> {
try {
const response = await $fetch<API_Response<T>>(request, {
...options,
headers: {
...options?.headers,
Authorization: options.authToken,
},
baseURL: useRuntimeConfig().public.baseURL,
});
return response;
} catch (fetchError: any) {
if (fetchError.statusCode == constants.STATUS_UNAUTHORIZED) {
try {
const newToken = await options.refreshTokens();
options.authToken = newToken;
return authorizedRequest(request, options);
} catch (refreshTokenError: any) {
throw refreshTokenError;
}
}
throw fetchError;
}
}
type Request = Parameters<typeof $fetch>[0];
type ExtendedFetchOptions = Parameters<typeof $fetch>[1] & {
authToken: string;
refreshTokens: () => Promise<string>;
};
export default async function authorizedRequest<T>(
request: Request,
options: ExtendedFetchOptions,
): Promise<API_Response<T>> {
try {
const response = await $fetch<API_Response<T>>(request, {
...options,
headers: {
...options?.headers,
Authorization: options.authToken,
},
baseURL: useRuntimeConfig().public.baseURL,
});
return response;
} catch (fetchError: any) {
if (fetchError.statusCode == constants.STATUS_UNAUTHORIZED) {
try {
const newToken = await options.refreshTokens();
options.authToken = newToken;
return authorizedRequest(request, options);
} catch (refreshTokenError: any) {
throw refreshTokenError;
}
}
throw fetchError;
}
}