123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- const fetch = require('../server/node_modules/node-fetch');
- const { existsSync, readFileSync, writeFileSync, unlinkSync } = require('fs');
- const { join } = require('path');
- const localpackage = join(__dirname, '../server/package.json');
- const remoteUrl = 'https://code.03c8.net/KrakensLab/oasis/raw/master/src/server/package.json'; // Official SNH-Oasis
- const remoteUrl2 = 'https://raw.githubusercontent.com/epsylon/oasis/refs/heads/main/src/server/package.json'; // Mirror SNH-Oasis
- let printed = false;
- async function extractVersionFromText(text) {
- try {
- const versionMatch = text.match(/"version":\s*"([^"]+)"/);
- if (versionMatch) {
- return versionMatch[1];
- } else {
- throw new Error('Version not found in the response.');
- }
- } catch (error) {
- console.error("Error extracting version:", error.message);
- return null;
- }
- }
- async function diffVersion(body, callback) {
- try {
- const remoteData = JSON.parse(body);
- const remoteVersion = remoteData.version;
- const localData = JSON.parse(readFileSync(localpackage, 'utf8'));
- const localVersion = localData.version;
- const updateFlagPath = join(__dirname, "../server/.update_required");
- if (remoteVersion !== localVersion) {
- writeFileSync(updateFlagPath, JSON.stringify({ required: true }));
- callback("required");
- } else {
- if (existsSync(updateFlagPath)) unlinkSync(updateFlagPath);
- callback(""); // no updates required
- }
- } catch (error) {
- console.error("Error comparing versions:", error.message);
- callback("error");
- }
- }
- async function checkMirror(callback) {
- try {
- const response = await fetch(remoteUrl2, {
- method: 'GET',
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
- 'Accept': 'application/json, text/plain, */*',
- 'Accept-Language': 'en-US,en;q=0.9',
- 'Accept-Encoding': 'gzip, deflate, br',
- 'Connection': 'keep-alive',
- 'Referer': 'https://raw.githubusercontent.com',
- 'Origin': 'https://raw.githubusercontent.com'
- }
- });
- if (!response.ok) {
- throw new Error(`Request failed with status ${response.status}`);
- }
- const data = await response.text();
- callback(null, data);
- } catch (error) {
- console.error("\noasis@version: no updates requested.\n");
- callback(error);
- }
- }
- exports.getRemoteVersion = async () => {
- if (existsSync('../../.git')) {
- try {
- const response = await fetch(remoteUrl, {
- method: 'GET',
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
- 'Accept': 'application/json, text/plain, */*',
- 'Accept-Language': 'en-US,en;q=0.9',
- 'Accept-Encoding': 'gzip, deflate, br',
- 'Connection': 'keep-alive',
- 'Referer': 'https://code.03c8.net',
- 'Origin': 'https://code.03c8.net'
- }
- });
- if (!response.ok) {
- throw new Error(`Request failed with status ${response.status}`);
- }
- const data = await response.text();
- diffVersion(data, (status) => {
- if (status === "required" && !printed) {
- printed = true;
- console.log("\noasis@version: new code updates are available:\n\n1) Run Oasis and go to 'Settings' tab\n2) Click at 'Get updates' button to download latest code\n3) Restart Oasis when finished\n");
- } else if (status === "") {
- console.log("\noasis@version: no updates requested.\n");
- }
- });
- } catch (error) {
- checkMirror((err, data) => {
- if (err) {
- console.error("\noasis@version: no updates requested.\n");
- } else {
- diffVersion(data, (status) => {
- if (status === "required" && !printed) {
- printed = true;
- console.log("\noasis@version: new code updates are available:\n\n1) Run Oasis and go to 'Settings' tab\n2) Click at 'Get updates' button to download latest code\n3) Restart Oasis when finished\n");
- } else {
- console.log("oasis@version: no updates requested.\n");
- }
- });
- }
- });
- }
- }
- };
|