const config = require('./config'); function pad(n) { return String(n).padStart(2, '0'); } function buildFileName(originalName, ext) { const now = new Date(); // Format: YYYY-MM-DD const dateStr = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`; // Format: HH-MM-SS (using dashes since colons can be problematic in filenames) const timeStr = `${pad(now.getHours())}-${pad(now.getMinutes())}-${pad(now.getSeconds())}`; if (originalName) { // Option A: original name return originalName; } else { // Option B: Fallback if no name is provided return `${dateStr}_${timeStr}.${ext || 'bin'}`; } } async function uploadMedia(base64Data, mimeType, ext, originalName) { const url = config.appsScriptUrl; if (!url) throw new Error('Missing Apps Script URL'); const fileName = buildFileName(originalName, ext); const payload = JSON.stringify({ fileBase64: base64Data, mimeType, fileName, }); try { // Native fetch handles Google's 302 redirects cleanly const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: payload, }); // Google Apps Script text output comes back as text first const body = await response.text(); console.log('[GDRIVE] Raw response:', body); const result = JSON.parse(body); if (!result.success) { throw new Error(result.error || 'Upload failed'); } return result.url; } catch (error) { throw new Error('Apps Script communication failed: ' + error.message); } } module.exports = { uploadMedia };