Vesktop/src/main/utils/vencordLoader.ts

50 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-04-04 00:41:52 +02:00
import { existsSync, mkdirSync } from "fs";
import { join } from "path";
import { USER_AGENT, VENCORD_FILES_DIR } from "../constants";
import { downloadFile, simpleGet } from "./http";
2023-04-04 02:04:42 +02:00
const API_BASE = "https://api.github.com/repos/Vendicated/Vencord";
2023-04-04 00:41:52 +02:00
const FILES_TO_DOWNLOAD = [
"vencordDesktopMain.js",
"preload.js",
"vencordDesktopRenderer.js",
"renderer.css"
];
export async function githubGet(endpoint: string) {
return simpleGet(API_BASE + endpoint, {
headers: {
Accept: "application/vnd.github+json",
"User-Agent": USER_AGENT
}
});
}
export async function downloadVencordFiles() {
const release = await githubGet("/releases/latest");
const data = JSON.parse(release.toString("utf-8"));
const assets = data.assets as Array<{
name: string;
browser_download_url: string;
}>;
await Promise.all(
assets
2023-04-09 03:10:24 +02:00
.filter(({ name }) =>
FILES_TO_DOWNLOAD.some(f => name.startsWith(f))
)
2023-04-04 00:41:52 +02:00
.map(({ name, browser_download_url }) =>
2023-04-09 03:10:24 +02:00
downloadFile(browser_download_url, join(VENCORD_FILES_DIR, name))
2023-04-04 00:41:52 +02:00
)
);
}
export async function ensureVencordFiles() {
2023-04-09 03:10:24 +02:00
if (existsSync(join(VENCORD_FILES_DIR, "vencordDesktopMain.js"))) return;
2023-04-04 00:41:52 +02:00
mkdirSync(VENCORD_FILES_DIR, { recursive: true });
await downloadVencordFiles();
}