this repo has no description
1import { MoonbaseNatives, RepositoryManifest } from "./types";
2import asar from "@electron/asar";
3import fs from "fs";
4import path from "path";
5import os from "os";
6import { repoUrlFile } from "types/src/constants";
7
8async function fetchRepositories(repos: string[]) {
9 const ret: Record<string, RepositoryManifest[]> = {};
10
11 for (const repo of repos) {
12 try {
13 const req = await fetch(repo);
14 const json = await req.json();
15 ret[repo] = json;
16 } catch (e) {
17 console.error(`Error fetching repository ${repo}`, e);
18 }
19 }
20
21 return ret;
22}
23
24async function installExtension(
25 manifest: RepositoryManifest,
26 url: string,
27 repo: string
28) {
29 const req = await fetch(url);
30
31 const dir = moonlightNode.getExtensionDir(manifest.id);
32 // remake it in case of updates
33 if (fs.existsSync(dir)) fs.rmdirSync(dir, { recursive: true });
34 fs.mkdirSync(dir, { recursive: true });
35
36 // for some reason i just can't .writeFileSync() a file that ends in .asar???
37 const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "moonlight-"));
38 const tempFile = path.join(tempDir, "extension");
39 const buffer = await req.arrayBuffer();
40 fs.writeFileSync(tempFile, Buffer.from(buffer));
41
42 asar.extractAll(tempFile, dir);
43 fs.writeFileSync(path.join(dir, repoUrlFile), repo);
44}
45
46async function deleteExtension(id: string) {
47 const dir = moonlightNode.getExtensionDir(id);
48 fs.rmdirSync(dir, { recursive: true });
49}
50
51function getExtensionConfig(id: string, key: string): any {
52 const config = moonlightNode.config.extensions[id];
53 if (typeof config === "object") {
54 return config.config?.[key];
55 }
56
57 return undefined;
58}
59
60const exports: MoonbaseNatives = {
61 fetchRepositories,
62 installExtension,
63 deleteExtension,
64 getExtensionConfig
65};
66
67module.exports = exports;