added wrapper package

This commit is contained in:
srgooglo 2022-10-04 15:00:15 +02:00
parent 6388a99f1b
commit fcded2db92
3 changed files with 169 additions and 0 deletions

View File

@ -0,0 +1,20 @@
{
"name": "wrapper",
"version": "1.0.0",
"main": "./src/index.js",
"license": "MIT",
"scripts": {
"dev": "corenode-node ./src/index.js"
},
"dependencies": {
"7zip-min": "^1.4.3",
"@octokit/rest": "^19.0.4",
"cors": "2.8.5",
"axios": "^0.27.2",
"dotenv": "^16.0.3",
"express": "^4.18.1"
},
"devDependencies": {
"corenode": "^0.28.26"
}
}

View File

@ -0,0 +1,62 @@
require("dotenv").config()
const packagejson = require("../package.json")
import fs from "fs"
import path from "path"
import express from "express"
import cors from "cors"
import setupLatestRelease from "./lib/setupDist"
global.remoteRepo = "ragestudio/comty"
global.cachePath = path.join(process.cwd(), "cache")
global.distPath = path.join(process.cwd(), "dist")
async function checkDistIntegrity() {
// check if dist folder exists
if (!fs.existsSync(global.distPath)) {
return false
}
// TODO: check the dist checksum with oficial server checksum
return true
}
async function runServer() {
const app = express()
const portFromArgs = process.argv[2]
let portListen = portFromArgs ? portFromArgs : 9000
app.use(cors({
origin: "*",
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
preflightContinue: true,
optionsSuccessStatus: 204
}))
app.use(express.static(global.distPath))
app.get("*", function (req, res) {
res.sendFile(path.join(global.distPath, "index.html"))
})
app.listen(portListen)
console.log(`🌐 Listening app in port [${portListen}]`)
}
async function main() {
// check if dist is valid
if (!checkDistIntegrity()) {
await setupLatestRelease()
}
// start app
await runServer()
}
main().catch((err) => {
console.error(`[FATAL ERROR] >`, err)
})

View File

@ -0,0 +1,87 @@
const fs = require("fs")
const path = require("path")
const axios = require("axios")
const _7z = require("7zip-min")
const { Octokit } = require("@octokit/rest")
const octokit = new Octokit({
// auth: process.env.GITHUB_TOKEN
})
export async function getLatestReleaseBundleFromGithub() {
console.log("Getting latest release bundle from github...")
const release = await octokit.repos.getLatestRelease({
owner: global.remoteRepo.split("/")[0],
repo: global.remoteRepo.split("/")[1]
})
const bundle = release.data.assets.find(asset => asset.name === "app_dist.7z")
return bundle
}
export async function downloadBundle(bundle) {
// check if bundle exists
if (fs.existsSync(path.join(global.cachePath, "app_dist.7z"))) {
fs.unlinkSync(path.join(global.cachePath, "app_dist.7z"))
}
console.log("Downloading bundle...")
const response = await axios.get(bundle.browser_download_url, {
responseType: "stream"
})
const writer = fs.createWriteStream(path.join(global.cachePath, "app_dist.7z"))
response.data.pipe(writer)
return new Promise((resolve, reject) => {
writer.on("finish", resolve)
writer.on("error", reject)
})
}
export async function extractBundle() {
return new Promise((resolve, reject) => {
console.log("Extracting bundle...")
_7z.unpack(path.join(global.cachePath, "app_dist.7z"), path.resolve(global.distPath, ".."), (err) => {
if (err) {
reject(err)
} else {
resolve(global.distPath)
}
})
})
}
export async function setupLatestRelease() {
// create cache folder
if (!fs.existsSync(global.cachePath)) {
fs.mkdirSync(global.cachePath)
}
// create dist folder
if (!fs.existsSync(global.distPath)) {
fs.mkdirSync(global.distPath)
}
const bundle = await getLatestReleaseBundleFromGithub()
await downloadBundle(bundle)
const bundlePath = await extractBundle()
console.log(`Bundle extracted to ${bundlePath}`)
console.log("Cleaning up...")
// delete cache folder
if (fs.existsSync(global.cachePath)) {
fs.rmdirSync(global.cachePath, { recursive: true })
}
}
export default setupLatestRelease