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;