updater.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. const fetch = require('../server/node_modules/node-fetch');
  2. const { existsSync, readFileSync, writeFileSync, unlinkSync } = require('fs');
  3. const { join } = require('path');
  4. const localpackage = join(__dirname, '../server/package.json');
  5. const remoteUrl = 'https://code.03c8.net/KrakensLab/oasis/raw/master/src/server/package.json'; // Official SNH-Oasis
  6. const remoteUrl2 = 'https://raw.githubusercontent.com/epsylon/oasis/refs/heads/main/src/server/package.json'; // Mirror SNH-Oasis
  7. let printed = false;
  8. async function extractVersionFromText(text) {
  9. try {
  10. const versionMatch = text.match(/"version":\s*"([^"]+)"/);
  11. if (versionMatch) {
  12. return versionMatch[1];
  13. } else {
  14. throw new Error('Version not found in the response.');
  15. }
  16. } catch (error) {
  17. console.error("Error extracting version:", error.message);
  18. return null;
  19. }
  20. }
  21. async function diffVersion(body, callback) {
  22. try {
  23. const remoteData = JSON.parse(body);
  24. const remoteVersion = remoteData.version;
  25. const localData = JSON.parse(readFileSync(localpackage, 'utf8'));
  26. const localVersion = localData.version;
  27. const updateFlagPath = join(__dirname, "../server/.update_required");
  28. if (remoteVersion !== localVersion) {
  29. writeFileSync(updateFlagPath, JSON.stringify({ required: true }));
  30. callback("required");
  31. } else {
  32. if (existsSync(updateFlagPath)) unlinkSync(updateFlagPath);
  33. callback(""); // no updates required
  34. }
  35. } catch (error) {
  36. console.error("Error comparing versions:", error.message);
  37. callback("error");
  38. }
  39. }
  40. async function checkMirror(callback) {
  41. try {
  42. const response = await fetch(remoteUrl2, {
  43. method: 'GET',
  44. headers: {
  45. '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',
  46. 'Accept': 'application/json, text/plain, */*',
  47. 'Accept-Language': 'en-US,en;q=0.9',
  48. 'Accept-Encoding': 'gzip, deflate, br',
  49. 'Connection': 'keep-alive',
  50. 'Referer': 'https://raw.githubusercontent.com',
  51. 'Origin': 'https://raw.githubusercontent.com'
  52. }
  53. });
  54. if (!response.ok) {
  55. throw new Error(`Request failed with status ${response.status}`);
  56. }
  57. const data = await response.text();
  58. callback(null, data);
  59. } catch (error) {
  60. console.error("\noasis@version: no updates requested.\n");
  61. callback(error);
  62. }
  63. }
  64. exports.getRemoteVersion = async () => {
  65. if (existsSync('../../.git')) {
  66. try {
  67. const response = await fetch(remoteUrl, {
  68. method: 'GET',
  69. headers: {
  70. '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',
  71. 'Accept': 'application/json, text/plain, */*',
  72. 'Accept-Language': 'en-US,en;q=0.9',
  73. 'Accept-Encoding': 'gzip, deflate, br',
  74. 'Connection': 'keep-alive',
  75. 'Referer': 'https://code.03c8.net',
  76. 'Origin': 'https://code.03c8.net'
  77. }
  78. });
  79. if (!response.ok) {
  80. throw new Error(`Request failed with status ${response.status}`);
  81. }
  82. const data = await response.text();
  83. diffVersion(data, (status) => {
  84. if (status === "required" && !printed) {
  85. printed = true;
  86. 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");
  87. } else if (status === "") {
  88. console.log("\noasis@version: no updates requested.\n");
  89. }
  90. });
  91. } catch (error) {
  92. checkMirror((err, data) => {
  93. if (err) {
  94. console.error("\noasis@version: no updates requested.\n");
  95. } else {
  96. diffVersion(data, (status) => {
  97. if (status === "required" && !printed) {
  98. printed = true;
  99. 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");
  100. } else {
  101. console.log("oasis@version: no updates requested.\n");
  102. }
  103. });
  104. }
  105. });
  106. }
  107. }
  108. };