/* * Vencord, a Discord client mod * Copyright (c) 2024 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import { IpcMainInvokeEvent } from "electron"; import { NativeUploadResult, NestUploadResponse } from "./types"; export async function uploadToNest( _: IpcMainInvokeEvent, fileBuffer: ArrayBuffer, filename: string, authToken: string ): Promise { try { const formData = new FormData(); formData.append("file", new Blob([fileBuffer]), filename); const response = await fetch("https://nest.rip/api/files/upload", { method: "POST", headers: { "Authorization": authToken }, body: formData }); if (!response.ok) { const errorText = await response.text(); return { success: false, error: `Upload failed: ${response.status} ${errorText}` }; } const data = await response.json() as NestUploadResponse; if (data.fileURL) { return { success: true, url: data.fileURL }; } return { success: false, error: "No URL returned from upload" }; } catch (e) { return { success: false, error: e instanceof Error ? e.message : "Unknown error" }; } } export async function uploadToEzHost( _: IpcMainInvokeEvent, fileBuffer: ArrayBuffer, filename: string, key: string ): Promise { try { const formData = new FormData(); formData.append("file", new Blob([fileBuffer]), filename); const response = await fetch("https://api.e-z.host/files", { method: "POST", headers: { key }, body: formData }); if (!response.ok) { const errorText = await response.text(); return { success: false, error: `Upload failed: ${response.status} ${errorText}` }; } const data = await response.json() as { success: boolean; error?: string; imageUrl?: string; rawUrl?: string; }; if (!data || !data.success) { return { success: false, error: data?.error || "Upload failed" }; } if (data.imageUrl || data.rawUrl) { return { success: true, url: data.imageUrl || data.rawUrl }; } return { success: false, error: "No URL returned from upload" }; } catch (e) { return { success: false, error: e instanceof Error ? e.message : "Unknown error" }; } } export async function uploadTo0x0( _: IpcMainInvokeEvent, fileBuffer: ArrayBuffer, filename: string ): Promise { try { const formData = new FormData(); formData.append("file", new Blob([fileBuffer]), filename); const response = await fetch("https://0x0.st", { method: "POST", body: formData }); if (!response.ok) { const errorText = await response.text(); return { success: false, error: `Upload failed: ${response.status} ${errorText}` }; } const text = (await response.text()).trim(); if (!text) { return { success: false, error: "No URL returned from upload" }; } return { success: true, url: text }; } catch (e) { return { success: false, error: e instanceof Error ? e.message : "Unknown error" }; } } export async function uploadToS3( _: IpcMainInvokeEvent, fileBuffer: ArrayBuffer, uploadUrl: string, headers: Record ): Promise { try { const response = await fetch(uploadUrl, { method: "PUT", headers, body: new Blob([fileBuffer]) }); if (!response.ok) { const errorText = await response.text(); return { success: false, error: `Upload failed: ${response.status} ${errorText}` }; } return { success: true, url: uploadUrl }; } catch (e) { return { success: false, error: e instanceof Error ? e.message : "Unknown error" }; } } export async function fetchFile( _: IpcMainInvokeEvent, url: string ): Promise<{ success: boolean; data?: ArrayBuffer; contentType?: string; error?: string }> { try { const response = await fetch(url); if (!response.ok) { return { success: false, error: `Fetch failed: ${response.status} ${response.statusText}` }; } const data = await response.arrayBuffer(); const contentType = response.headers.get("content-type") || ""; return { success: true, data, contentType }; } catch (e) { return { success: false, error: e instanceof Error ? e.message : "Unknown error" }; } }