2023-04-09 22:49:50 +02:00
|
|
|
/*
|
|
|
|
* SPDX-License-Identifier: GPL-3.0
|
|
|
|
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
|
|
|
|
* Copyright (c) 2023 Vendicated and Vencord contributors
|
|
|
|
*/
|
|
|
|
|
2023-04-04 00:41:52 +02:00
|
|
|
import { existsSync, mkdirSync } from "fs";
|
2023-04-10 22:05:21 +02:00
|
|
|
import type { RequestOptions } from "https";
|
2023-04-04 00:41:52 +02:00
|
|
|
import { join } from "path";
|
2023-04-09 22:49:50 +02:00
|
|
|
|
2023-04-04 00:41:52 +02:00
|
|
|
import { USER_AGENT, VENCORD_FILES_DIR } from "../constants";
|
|
|
|
import { downloadFile, simpleGet } from "./http";
|
|
|
|
|
2023-04-10 22:53:44 +02:00
|
|
|
const API_BASE = "https://api.github.com";
|
2023-04-04 00:41:52 +02:00
|
|
|
|
2023-04-09 22:49:50 +02:00
|
|
|
const FILES_TO_DOWNLOAD = ["vencordDesktopMain.js", "preload.js", "vencordDesktopRenderer.js", "renderer.css"];
|
2023-04-04 00:41:52 +02:00
|
|
|
|
2023-04-10 22:53:44 +02:00
|
|
|
export interface ReleaseData {
|
|
|
|
name: string;
|
|
|
|
tag_name: string;
|
|
|
|
html_url: string;
|
|
|
|
assets: Array<{
|
|
|
|
name: string;
|
|
|
|
browser_download_url: string;
|
|
|
|
}>;
|
|
|
|
}
|
|
|
|
|
2023-04-04 00:41:52 +02:00
|
|
|
export async function githubGet(endpoint: string) {
|
2023-04-10 22:05:21 +02:00
|
|
|
const opts: RequestOptions = {
|
2023-04-04 00:41:52 +02:00
|
|
|
headers: {
|
|
|
|
Accept: "application/vnd.github+json",
|
|
|
|
"User-Agent": USER_AGENT
|
|
|
|
}
|
2023-04-10 22:05:21 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
if (process.env.GITHUB_TOKEN) opts.headers!.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;
|
|
|
|
|
|
|
|
return simpleGet(API_BASE + endpoint, opts);
|
2023-04-04 00:41:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function downloadVencordFiles() {
|
2023-04-10 22:53:44 +02:00
|
|
|
const release = await githubGet("/repos/Vendicated/Vencord/releases/latest");
|
2023-04-04 00:41:52 +02:00
|
|
|
|
2023-04-10 22:53:44 +02:00
|
|
|
const { assets } = JSON.parse(release.toString("utf-8")) as ReleaseData;
|
2023-04-04 00:41:52 +02:00
|
|
|
|
|
|
|
await Promise.all(
|
|
|
|
assets
|
2023-04-09 22:49:50 +02:00
|
|
|
.filter(({ name }) => FILES_TO_DOWNLOAD.some(f => name.startsWith(f)))
|
|
|
|
.map(({ name, browser_download_url }) => 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();
|
|
|
|
}
|