import { Config } from "@fosscord/util"; import FormData from "form-data"; import { HTTPError } from "lambert-server"; import fetch from "node-fetch"; export async function uploadFile(path: string, file: Express.Multer.File) { const form = new FormData(); form.append("file", file.buffer, { contentType: file.mimetype, filename: file.originalname }); const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { headers: { signature: Config.get().security.requestSignature, ...form.getHeaders() }, method: "POST", body: form }); const result = await response.json(); if (response.status !== 200) throw result; return result; } export async function handleFile(path: string, body?: string): Promise { if (!body || !body.startsWith("data:")) return body; try { const mimetype = body.split(":")[1].split(";")[0]; const buffer = Buffer.from(body.split(",")[1], "base64"); // @ts-ignore const { id } = await uploadFile(path, { buffer, mimetype, originalname: "banner" }); return id; } catch (error) { console.error(error); throw new HTTPError("Invalid " + path); } }