2026-05-22 15:13:22 +00:00
|
|
|
import type { UploaderMetadata } from '@zeavis/shared';
|
2026-05-22 16:08:18 +00:00
|
|
|
import { env } from '../config/env';
|
2026-05-22 15:13:22 +00:00
|
|
|
|
|
|
|
|
export async function uploadImageToStorage(file: File): Promise<UploaderMetadata> {
|
|
|
|
|
const formData = new FormData();
|
|
|
|
|
formData.append('file', file);
|
|
|
|
|
formData.append('fileName', file.name);
|
|
|
|
|
|
2026-05-22 16:08:18 +00:00
|
|
|
const response = await fetch(`${env.uploaderBaseUrl}/api/upload`, {
|
2026-05-22 15:13:22 +00:00
|
|
|
method: 'POST',
|
|
|
|
|
body: formData,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!response.ok) {
|
2026-05-22 16:08:18 +00:00
|
|
|
throw new Error(`Upload failed with HTTP ${response.status}`);
|
2026-05-22 15:13:22 +00:00
|
|
|
}
|
|
|
|
|
|
2026-05-22 16:08:18 +00:00
|
|
|
const payload = await response.json() as Partial<UploaderMetadata>;
|
2026-05-22 15:13:22 +00:00
|
|
|
|
2026-05-22 16:08:18 +00:00
|
|
|
if (!payload.public_id || !payload.download_url || !payload.file_name || !payload.mime_type || typeof payload.size_bytes !== 'number') {
|
|
|
|
|
throw new Error('Upload response is missing required metadata');
|
2026-05-22 15:13:22 +00:00
|
|
|
}
|
|
|
|
|
|
2026-05-22 16:08:18 +00:00
|
|
|
return {
|
|
|
|
|
public_id: payload.public_id,
|
|
|
|
|
telegram_file_id: payload.telegram_file_id,
|
|
|
|
|
telegram_file_unique_id: payload.telegram_file_unique_id,
|
|
|
|
|
file_name: payload.file_name,
|
|
|
|
|
mime_type: payload.mime_type,
|
|
|
|
|
size_bytes: payload.size_bytes,
|
|
|
|
|
file_type: payload.file_type ?? 'image',
|
|
|
|
|
download_url: payload.download_url,
|
|
|
|
|
};
|
2026-05-22 15:13:22 +00:00
|
|
|
}
|