import { request, requestBlob, requestForm, withQuery } from '../core/httpClient'; import type { FileObject } from '../types'; import { assertUploadFileSize } from '@/utils/fileUpload'; import { clearSession, dispatchSessionEvent, hasRecentUserActivity, readSession, redirectToPortalLogin } from '../session'; import { readErrorBody } from '../core/httpClient'; export const adminFilesApi = { uploadFileObject: async (file: File, body: { purpose: string; prefix?: string }, tenantId?: string) => { assertUploadFileSize(file); const form = new FormData(); form.set('file', file); form.set('purpose', body.purpose); if (body.prefix) { form.set('prefix', body.prefix); } const headers = new Headers(); const session = readSession('admin'); if (session && hasRecentUserActivity()) headers.set('x-session-activity', 'user'); if (tenantId) { headers.set('x-tenant-id', tenantId); } const response = await fetch('/api/admin/files/upload', { method: 'POST', headers, body: form, credentials: 'same-origin' }); if (response.status === 401 && session) { const error = await readErrorBody(response.clone()); if (error.code === 'SESSION_LOCKED') { dispatchSessionEvent('admin', 'locked', { message: error.message }); } else { clearSession('admin'); dispatchSessionEvent('admin', 'logout', { code: error.code, message: error.message }); redirectToPortalLogin('admin'); } } if (!response.ok) { throw new Error(await response.text()); } return response.json() as Promise; }, };