diff --git a/src/api/common.ts b/src/api/common.ts index fafd917..77ff869 100644 --- a/src/api/common.ts +++ b/src/api/common.ts @@ -53,16 +53,35 @@ export const commonApi = { formData.append('bucket', bucket); formData.append('path_prefix', pathPrefix); - const token = getAccessToken(); - const headers: Record = {}; - if (token) headers['Authorization'] = `Bearer ${token}`; + if (!getAccessToken()) { + const { authApi } = await import('./auth'); + try { await authApi.refresh(); } catch { /* will fail on upload */ } + } - const res = await fetch('/api/v1/common/upload', { - method: 'POST', - headers, - body: formData, - credentials: 'include', - }); + const doUpload = async () => { + const token = getAccessToken(); + const headers: Record = {}; + if (token) headers['Authorization'] = `Bearer ${token}`; + + return fetch('/api/v1/common/upload', { + method: 'POST', + headers, + body: formData, + credentials: 'include', + }); + }; + + let res = await doUpload(); + + if (res.status === 401) { + const { authApi } = await import('./auth'); + try { + await authApi.refresh(); + } catch { + throw new Error('auth expired'); + } + res = await doUpload(); + } if (!res.ok) { throw new Error('upload failed');