Spaces:
Sleeping
Sleeping
| async function apiFetch(path, { accessToken, idToken }, options = {}) { | |
| const controller = new AbortController(); | |
| const timeoutId = window.setTimeout(() => controller.abort(), 60000); | |
| const response = await fetch(path, { | |
| ...options, | |
| signal: controller.signal, | |
| headers: { | |
| 'X-Google-ID-Token': idToken, | |
| Authorization: `Bearer ${accessToken}`, | |
| ...(options.headers || {}), | |
| }, | |
| }).finally(() => window.clearTimeout(timeoutId)); | |
| if (!response.ok) { | |
| const detail = await response.text(); | |
| throw new Error(`Google Drive API error ${response.status}: ${detail}`); | |
| } | |
| return response; | |
| } | |
| export async function listObjFiles(tokens) { | |
| const response = await apiFetch('/api/files', tokens); | |
| const data = await response.json(); | |
| return data.files || []; | |
| } | |
| export async function downloadObjText(fileId, tokens) { | |
| const response = await apiFetch(`/api/files/${encodeURIComponent(fileId)}`, tokens); | |
| return response.text(); | |
| } | |