@dimzxzzx07/mc-headless 1.9.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,12 +5,12 @@
5
5
  </div>
6
6
 
7
7
  <div align="center">
8
- <img src="https://img.shields.io/badge/Version-1.9.0-2563eb?style=for-the-badge&logo=typescript" alt="Version">
8
+ <img src="https://img.shields.io/badge/Version-2.0.0-2563eb?style=for-the-badge&logo=typescript" alt="Version">
9
9
  <img src="https://img.shields.io/badge/License-MIT-green?style=for-the-badge&logo=open-source-initiative" alt="License">
10
10
  <img src="https://img.shields.io/badge/Node-18%2B-339933?style=for-the-badge&logo=nodedotjs" alt="Node">
11
11
  <img src="https://img.shields.io/badge/Java-Portable-007396?style=for-the-badge&logo=openjdk" alt="Java Portable">
12
12
  <img src="https://img.shields.io/badge/Termux-Friendly-00A98F?style=for-the-badge&logo=termux" alt="Termux">
13
- <img src="https://img.shields.io/badge/Stable-1.9.0-brightgreen?style=for-the-badge" alt="Stable">
13
+ <img src="https://img.shields.io/badge/Stable-2.0.0-brightgreen?style=for-the-badge" alt="Stable">
14
14
  </div>
15
15
 
16
16
  <div align="center">
@@ -33,7 +33,7 @@
33
33
  ## Table of Contents
34
34
 
35
35
  - [Overview](#overview)
36
- - [What's New in 1.9.0](#whats-new-in-190)
36
+ - [What's New in 2.0.0](#whats-new-in-200)
37
37
  - [Features](#features)
38
38
  - [Why MC-Headless?](#why-mc-headless)
39
39
  - [Installation](#installation)
@@ -70,9 +70,9 @@ Built specifically for developers, sysadmins, and Minecraft enthusiasts who want
70
70
 
71
71
  ---
72
72
 
73
- ## What's New in 1.9.0
73
+ ## What's New in 2.0.0
74
74
 
75
- ### Version 1.9.0 - March 2026
75
+ ### Version 2.0.0 - March 2026
76
76
 
77
77
  - **Portable Java** - Auto-download JRE to `/tmp` (no system installation required)
78
78
  - **Smart Java Detection** - Uses `which java` to check existing installation
@@ -140,7 +140,7 @@ wget https://github.com/SkinsRestorer/SkinsRestorerX/releases/latest/download/Sk
140
140
  tail -f logs/latest.log
141
141
  ```
142
142
 
143
- After (MC-Headless v1.9.0)
143
+ After (MC-Headless v2.0.0)
144
144
 
145
145
  ```javascript
146
146
  const server = new MinecraftServer({
@@ -298,7 +298,7 @@ async function startServer() {
298
298
  server.on("ready", (info) => {
299
299
  console.clear();
300
300
  console.log(`\n==========================================`);
301
- console.log(`Minecraft Server - v1.9.0`);
301
+ console.log(`Minecraft Server - v2.0.0`);
302
302
  console.log(` IP: ${publicIp}:${info.port}`);
303
303
  console.log(` Version: ${info.version}`);
304
304
  console.log(` Memory: ${info.memory.used}/${info.memory.max} MB`);
@@ -6,15 +6,15 @@ export interface JavaInfo {
6
6
  export declare class JavaChecker {
7
7
  private static logger;
8
8
  private static readonly JAVA_DIR;
9
- private static readonly JAVA_17_URL;
10
- private static readonly JAVA_21_URL;
11
- private static readonly JAVA_11_URL;
12
- private static readonly JAVA_8_URL;
9
+ private static readonly JAVA_URLS;
13
10
  static checkJava(): Promise<boolean>;
14
11
  static getSystemJavaPath(): string | null;
15
12
  static getSystemJavaVersion(): string | null;
13
+ private static downloadWithCurl;
14
+ private static downloadWithWget;
15
+ private static downloadWithNode;
16
+ private static downloadWithFallback;
16
17
  static getOrDownloadPortableJava(version?: '17' | '21' | '11' | '8'): Promise<JavaInfo>;
17
- private static downloadFile;
18
18
  static ensureJava(version?: '17' | '21' | 'auto', usePortable?: boolean): Promise<JavaInfo>;
19
19
  static cleanupOldJava(): void;
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JavaChecker.d.ts","sourceRoot":"","sources":["../../src/core/JavaChecker.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAwB;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAwI;IAC3K,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAwI;IAC3K,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAwI;IAC3K,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkI;WAEhJ,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;WAenC,iBAAiB,IAAI,MAAM,GAAG,IAAI;WASlC,oBAAoB,IAAI,MAAM,GAAG,IAAI;WAc/B,yBAAyB,CAAC,OAAO,GAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmE1G,OAAO,CAAC,MAAM,CAAC,YAAY;WAyCP,UAAU,CAAC,OAAO,GAAE,IAAI,GAAG,IAAI,GAAG,MAAe,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;WAqBxG,cAAc,IAAI,IAAI;CAkBvC"}
1
+ {"version":3,"file":"JavaChecker.d.ts","sourceRoot":"","sources":["../../src/core/JavaChecker.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAwB;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAE1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAe/B;WAEkB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;WAenC,iBAAiB,IAAI,MAAM,GAAG,IAAI;WASlC,oBAAoB,IAAI,MAAM,GAAG,IAAI;mBAc9B,gBAAgB;mBA0BhB,gBAAgB;mBA0BhB,gBAAgB;mBAsDhB,oBAAoB;WAoBrB,yBAAyB,CAAC,OAAO,GAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;WAqEtF,UAAU,CAAC,OAAO,GAAE,IAAI,GAAG,IAAI,GAAG,MAAe,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;WAqBxG,cAAc,IAAI,IAAI;CAkBvC"}
@@ -38,15 +38,28 @@ const child_process_1 = require("child_process");
38
38
  const fs = __importStar(require("fs-extra"));
39
39
  const path = __importStar(require("path"));
40
40
  const https = __importStar(require("https"));
41
+ const http = __importStar(require("http"));
41
42
  const tar = __importStar(require("tar"));
42
43
  const Logger_1 = require("../utils/Logger");
43
44
  class JavaChecker {
44
45
  static logger = Logger_1.Logger.getInstance();
45
46
  static JAVA_DIR = path.join('/tmp', '.mc-headless-java');
46
- static JAVA_17_URL = 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jre_x64_linux_hotspot_17.0.10_7.tar.gz';
47
- static JAVA_21_URL = 'https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.2%2B13/OpenJDK21U-jre_x64_linux_hotspot_21.0.2_13.tar.gz';
48
- static JAVA_11_URL = 'https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jre_x64_linux_hotspot_11.0.22_7.tar.gz';
49
- static JAVA_8_URL = 'https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u402-b06/OpenJDK8U-jre_x64_linux_hotspot_8u402b06.tar.gz';
47
+ static JAVA_URLS = {
48
+ '21': [
49
+ 'https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz',
50
+ 'https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.2%2B13/OpenJDK21U-jdk_x64_linux_hotspot_21.0.2_13.tar.gz'
51
+ ],
52
+ '17': [
53
+ 'https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz',
54
+ 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz'
55
+ ],
56
+ '11': [
57
+ 'https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz'
58
+ ],
59
+ '8': [
60
+ 'https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u402-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u402b06.tar.gz'
61
+ ]
62
+ };
50
63
  static async checkJava() {
51
64
  return new Promise((resolve) => {
52
65
  (0, child_process_1.exec)('which java', (error, stdout) => {
@@ -89,74 +102,76 @@ class JavaChecker {
89
102
  return null;
90
103
  }
91
104
  }
92
- static async getOrDownloadPortableJava(version = '17') {
93
- await fs.ensureDir(this.JAVA_DIR);
94
- const javaHome = path.join(this.JAVA_DIR, `jre-${version}`);
95
- const javaBin = path.join(javaHome, 'bin', 'java');
96
- if (await fs.pathExists(javaBin)) {
97
- this.logger.info(`Portable Java ${version} already exists at ${javaBin}`);
98
- const versionOutput = (0, child_process_1.execSync)(`"${javaBin}" -version 2>&1`).toString();
99
- this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
100
- return {
101
- path: javaBin,
102
- version: version,
103
- type: 'portable'
104
- };
105
- }
106
- this.logger.info(`Downloading portable Java ${version} JRE...`);
107
- let downloadUrl = '';
108
- switch (version) {
109
- case '21':
110
- downloadUrl = this.JAVA_21_URL;
111
- break;
112
- case '17':
113
- downloadUrl = this.JAVA_17_URL;
114
- break;
115
- case '11':
116
- downloadUrl = this.JAVA_11_URL;
117
- break;
118
- case '8':
119
- downloadUrl = this.JAVA_8_URL;
120
- break;
121
- default:
122
- downloadUrl = this.JAVA_17_URL;
123
- }
124
- const tarPath = path.join(this.JAVA_DIR, `jre-${version}.tar.gz`);
125
- await this.downloadFile(downloadUrl, tarPath);
126
- this.logger.info(`Extracting Java ${version}...`);
127
- await fs.ensureDir(javaHome);
128
- await tar.extract({
129
- file: tarPath,
130
- cwd: javaHome,
131
- strip: 1
105
+ static async downloadWithCurl(url, destPath) {
106
+ return new Promise((resolve, reject) => {
107
+ this.logger.info(`Downloading with curl: ${url}`);
108
+ const curl = (0, child_process_1.exec)(`curl -L -o "${destPath}" "${url}"`, (error) => {
109
+ if (error) {
110
+ reject(error);
111
+ }
112
+ else {
113
+ resolve();
114
+ }
115
+ });
116
+ if (curl.stdout) {
117
+ curl.stdout.on('data', (data) => {
118
+ process.stdout.write(data);
119
+ });
120
+ }
121
+ if (curl.stderr) {
122
+ curl.stderr.on('data', (data) => {
123
+ process.stderr.write(data);
124
+ });
125
+ }
132
126
  });
133
- await fs.remove(tarPath);
134
- await fs.chmod(javaBin, 0o755);
135
- this.logger.success(`Portable Java ${version} installed at ${javaBin}`);
136
- const versionOutput = (0, child_process_1.execSync)(`"${javaBin}" -version 2>&1`).toString();
137
- this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
138
- return {
139
- path: javaBin,
140
- version: version,
141
- type: 'portable'
142
- };
143
127
  }
144
- static downloadFile(url, destPath) {
128
+ static async downloadWithWget(url, destPath) {
145
129
  return new Promise((resolve, reject) => {
146
- this.logger.info(`Downloading from ${url}`);
147
- const file = fs.createWriteStream(destPath);
148
- https.get(url, (response) => {
130
+ this.logger.info(`Downloading with wget: ${url}`);
131
+ const wget = (0, child_process_1.exec)(`wget -O "${destPath}" "${url}"`, (error) => {
132
+ if (error) {
133
+ reject(error);
134
+ }
135
+ else {
136
+ resolve();
137
+ }
138
+ });
139
+ if (wget.stdout) {
140
+ wget.stdout.on('data', (data) => {
141
+ process.stdout.write(data);
142
+ });
143
+ }
144
+ if (wget.stderr) {
145
+ wget.stderr.on('data', (data) => {
146
+ process.stderr.write(data);
147
+ });
148
+ }
149
+ });
150
+ }
151
+ static async downloadWithNode(url, destPath) {
152
+ return new Promise((resolve, reject) => {
153
+ const protocol = url.startsWith('https') ? https : http;
154
+ const request = protocol.get(url, (response) => {
155
+ if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 307 || response.statusCode === 308) {
156
+ const location = response.headers.location;
157
+ if (location) {
158
+ this.logger.info(`Redirecting to ${location}`);
159
+ this.downloadWithNode(location, destPath).then(resolve).catch(reject);
160
+ return;
161
+ }
162
+ }
149
163
  if (response.statusCode !== 200) {
150
164
  reject(new Error(`Download failed: ${response.statusCode}`));
151
165
  return;
152
166
  }
167
+ const file = fs.createWriteStream(destPath);
153
168
  const totalSize = parseInt(response.headers['content-length'] || '0');
154
169
  let downloadedSize = 0;
155
170
  response.on('data', (chunk) => {
156
171
  downloadedSize += chunk.length;
157
172
  if (totalSize > 0) {
158
173
  const percent = ((downloadedSize / totalSize) * 100).toFixed(1);
159
- process.stdout.write(`\rDownloading Java: ${percent}% (${(downloadedSize / 1024 / 1024).toFixed(1)} MB / ${(totalSize / 1024 / 1024).toFixed(1)} MB)`);
174
+ process.stdout.write(`\rDownloading Java: ${percent}% (${(downloadedSize / 1024 / 1024).toFixed(1)} MB)`);
160
175
  }
161
176
  });
162
177
  response.pipe(file);
@@ -169,12 +184,87 @@ class JavaChecker {
169
184
  fs.unlink(destPath).catch(() => { });
170
185
  reject(err);
171
186
  });
172
- }).on('error', (err) => {
187
+ });
188
+ request.on('error', (err) => {
173
189
  fs.unlink(destPath).catch(() => { });
174
190
  reject(err);
175
191
  });
192
+ request.end();
176
193
  });
177
194
  }
195
+ static async downloadWithFallback(url, destPath) {
196
+ const downloaders = [
197
+ this.downloadWithCurl.bind(this),
198
+ this.downloadWithWget.bind(this),
199
+ this.downloadWithNode.bind(this)
200
+ ];
201
+ for (const downloader of downloaders) {
202
+ try {
203
+ await downloader(url, destPath);
204
+ return;
205
+ }
206
+ catch (error) {
207
+ const errorMessage = error instanceof Error ? error.message : String(error);
208
+ this.logger.warning(`Download method failed: ${errorMessage}`);
209
+ }
210
+ }
211
+ throw new Error('All download methods failed');
212
+ }
213
+ static async getOrDownloadPortableJava(version = '17') {
214
+ await fs.ensureDir(this.JAVA_DIR);
215
+ const javaHome = path.join(this.JAVA_DIR, `jre-${version}`);
216
+ const javaBin = path.join(javaHome, 'bin', 'java');
217
+ if (await fs.pathExists(javaBin)) {
218
+ this.logger.info(`Portable Java ${version} already exists at ${javaBin}`);
219
+ try {
220
+ const versionOutput = (0, child_process_1.execSync)(`"${javaBin}" -version 2>&1`).toString();
221
+ this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
222
+ return {
223
+ path: javaBin,
224
+ version: version,
225
+ type: 'portable'
226
+ };
227
+ }
228
+ catch (error) {
229
+ this.logger.warning(`Existing Java seems corrupted, re-downloading...`);
230
+ await fs.remove(javaHome);
231
+ }
232
+ }
233
+ const urls = this.JAVA_URLS[version] || this.JAVA_URLS['17'];
234
+ let lastError = null;
235
+ for (let i = 0; i < urls.length; i++) {
236
+ const url = urls[i];
237
+ const tarPath = path.join(this.JAVA_DIR, `jre-${version}-${i}.tar.gz`);
238
+ try {
239
+ this.logger.info(`Downloading portable Java ${version} (attempt ${i + 1}/${urls.length})...`);
240
+ this.logger.info(`URL: ${url}`);
241
+ await this.downloadWithFallback(url, tarPath);
242
+ this.logger.info(`Extracting Java ${version}...`);
243
+ await fs.ensureDir(javaHome);
244
+ await tar.extract({
245
+ file: tarPath,
246
+ cwd: javaHome,
247
+ strip: 1
248
+ });
249
+ await fs.remove(tarPath);
250
+ await fs.chmod(javaBin, 0o755);
251
+ this.logger.success(`Portable Java ${version} installed at ${javaBin}`);
252
+ const versionOutput = (0, child_process_1.execSync)(`"${javaBin}" -version 2>&1`).toString();
253
+ this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
254
+ return {
255
+ path: javaBin,
256
+ version: version,
257
+ type: 'portable'
258
+ };
259
+ }
260
+ catch (error) {
261
+ lastError = error instanceof Error ? error : new Error(String(error));
262
+ this.logger.warning(`Attempt ${i + 1} failed: ${lastError.message}`);
263
+ await fs.remove(tarPath).catch(() => { });
264
+ }
265
+ }
266
+ throw new Error(`Failed to download Java ${version} after ${urls.length} attempts. Last error: ${lastError?.message}`);
267
+ }
178
268
  static async ensureJava(version = 'auto', usePortable = true) {
179
269
  const targetVersion = version === 'auto' ? '17' : version;
180
270
  if (!usePortable) {
@@ -1 +1 @@
1
- {"version":3,"file":"JavaChecker.js","sourceRoot":"","sources":["../../src/core/JavaChecker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JavaChecker.js","sourceRoot":"","sources":["../../src/core/JavaChecker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dimzxzzx07/mc-headless",
3
- "version": "1.9.0",
3
+ "version": "2.0.0",
4
4
  "description": "Minecraft Headless Server Manager - Run Java/Bedrock/Crossplay servers easily via Node.js",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -2,6 +2,7 @@ import { execSync, exec } from 'child_process';
2
2
  import * as fs from 'fs-extra';
3
3
  import * as path from 'path';
4
4
  import * as https from 'https';
5
+ import * as http from 'http';
5
6
  import * as tar from 'tar';
6
7
  import { Logger } from '../utils/Logger';
7
8
 
@@ -14,10 +15,23 @@ export interface JavaInfo {
14
15
  export class JavaChecker {
15
16
  private static logger = Logger.getInstance();
16
17
  private static readonly JAVA_DIR = path.join('/tmp', '.mc-headless-java');
17
- private static readonly JAVA_17_URL = 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jre_x64_linux_hotspot_17.0.10_7.tar.gz';
18
- private static readonly JAVA_21_URL = 'https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.2%2B13/OpenJDK21U-jre_x64_linux_hotspot_21.0.2_13.tar.gz';
19
- private static readonly JAVA_11_URL = 'https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jre_x64_linux_hotspot_11.0.22_7.tar.gz';
20
- private static readonly JAVA_8_URL = 'https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u402-b06/OpenJDK8U-jre_x64_linux_hotspot_8u402b06.tar.gz';
18
+
19
+ private static readonly JAVA_URLS = {
20
+ '21': [
21
+ 'https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz',
22
+ 'https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.2%2B13/OpenJDK21U-jdk_x64_linux_hotspot_21.0.2_13.tar.gz'
23
+ ],
24
+ '17': [
25
+ 'https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz',
26
+ 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz'
27
+ ],
28
+ '11': [
29
+ 'https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz'
30
+ ],
31
+ '8': [
32
+ 'https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u402-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u402b06.tar.gz'
33
+ ]
34
+ };
21
35
 
22
36
  public static async checkJava(): Promise<boolean> {
23
37
  return new Promise((resolve) => {
@@ -57,84 +71,78 @@ export class JavaChecker {
57
71
  }
58
72
  }
59
73
 
60
- public static async getOrDownloadPortableJava(version: '17' | '21' | '11' | '8' = '17'): Promise<JavaInfo> {
61
- await fs.ensureDir(this.JAVA_DIR);
62
-
63
- const javaHome = path.join(this.JAVA_DIR, `jre-${version}`);
64
- const javaBin = path.join(javaHome, 'bin', 'java');
65
-
66
- if (await fs.pathExists(javaBin)) {
67
- this.logger.info(`Portable Java ${version} already exists at ${javaBin}`);
74
+ private static async downloadWithCurl(url: string, destPath: string): Promise<void> {
75
+ return new Promise((resolve, reject) => {
76
+ this.logger.info(`Downloading with curl: ${url}`);
68
77
 
69
- const versionOutput = execSync(`"${javaBin}" -version 2>&1`).toString();
70
- this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
78
+ const curl = exec(`curl -L -o "${destPath}" "${url}"`, (error) => {
79
+ if (error) {
80
+ reject(error);
81
+ } else {
82
+ resolve();
83
+ }
84
+ });
85
+
86
+ if (curl.stdout) {
87
+ curl.stdout.on('data', (data) => {
88
+ process.stdout.write(data);
89
+ });
90
+ }
91
+
92
+ if (curl.stderr) {
93
+ curl.stderr.on('data', (data) => {
94
+ process.stderr.write(data);
95
+ });
96
+ }
97
+ });
98
+ }
99
+
100
+ private static async downloadWithWget(url: string, destPath: string): Promise<void> {
101
+ return new Promise((resolve, reject) => {
102
+ this.logger.info(`Downloading with wget: ${url}`);
71
103
 
72
- return {
73
- path: javaBin,
74
- version: version,
75
- type: 'portable'
76
- };
77
- }
104
+ const wget = exec(`wget -O "${destPath}" "${url}"`, (error) => {
105
+ if (error) {
106
+ reject(error);
107
+ } else {
108
+ resolve();
109
+ }
110
+ });
78
111
 
79
- this.logger.info(`Downloading portable Java ${version} JRE...`);
80
-
81
- let downloadUrl = '';
82
- switch (version) {
83
- case '21':
84
- downloadUrl = this.JAVA_21_URL;
85
- break;
86
- case '17':
87
- downloadUrl = this.JAVA_17_URL;
88
- break;
89
- case '11':
90
- downloadUrl = this.JAVA_11_URL;
91
- break;
92
- case '8':
93
- downloadUrl = this.JAVA_8_URL;
94
- break;
95
- default:
96
- downloadUrl = this.JAVA_17_URL;
97
- }
112
+ if (wget.stdout) {
113
+ wget.stdout.on('data', (data) => {
114
+ process.stdout.write(data);
115
+ });
116
+ }
98
117
 
99
- const tarPath = path.join(this.JAVA_DIR, `jre-${version}.tar.gz`);
100
-
101
- await this.downloadFile(downloadUrl, tarPath);
102
-
103
- this.logger.info(`Extracting Java ${version}...`);
104
- await fs.ensureDir(javaHome);
105
- await tar.extract({
106
- file: tarPath,
107
- cwd: javaHome,
108
- strip: 1
118
+ if (wget.stderr) {
119
+ wget.stderr.on('data', (data) => {
120
+ process.stderr.write(data);
121
+ });
122
+ }
109
123
  });
110
-
111
- await fs.remove(tarPath);
112
-
113
- await fs.chmod(javaBin, 0o755);
114
-
115
- this.logger.success(`Portable Java ${version} installed at ${javaBin}`);
116
-
117
- const versionOutput = execSync(`"${javaBin}" -version 2>&1`).toString();
118
- this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
119
-
120
- return {
121
- path: javaBin,
122
- version: version,
123
- type: 'portable'
124
- };
125
124
  }
126
125
 
127
- private static downloadFile(url: string, destPath: string): Promise<void> {
126
+ private static async downloadWithNode(url: string, destPath: string): Promise<void> {
128
127
  return new Promise((resolve, reject) => {
129
- this.logger.info(`Downloading from ${url}`);
128
+ const protocol = url.startsWith('https') ? https : http;
130
129
 
131
- const file = fs.createWriteStream(destPath);
132
- https.get(url, (response) => {
130
+ const request = protocol.get(url, (response) => {
131
+ if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 307 || response.statusCode === 308) {
132
+ const location = response.headers.location;
133
+ if (location) {
134
+ this.logger.info(`Redirecting to ${location}`);
135
+ this.downloadWithNode(location, destPath).then(resolve).catch(reject);
136
+ return;
137
+ }
138
+ }
139
+
133
140
  if (response.statusCode !== 200) {
134
141
  reject(new Error(`Download failed: ${response.statusCode}`));
135
142
  return;
136
143
  }
137
144
 
145
+ const file = fs.createWriteStream(destPath);
138
146
  const totalSize = parseInt(response.headers['content-length'] || '0');
139
147
  let downloadedSize = 0;
140
148
 
@@ -142,7 +150,7 @@ export class JavaChecker {
142
150
  downloadedSize += chunk.length;
143
151
  if (totalSize > 0) {
144
152
  const percent = ((downloadedSize / totalSize) * 100).toFixed(1);
145
- process.stdout.write(`\rDownloading Java: ${percent}% (${(downloadedSize / 1024 / 1024).toFixed(1)} MB / ${(totalSize / 1024 / 1024).toFixed(1)} MB)`);
153
+ process.stdout.write(`\rDownloading Java: ${percent}% (${(downloadedSize / 1024 / 1024).toFixed(1)} MB)`);
146
154
  }
147
155
  });
148
156
 
@@ -158,13 +166,106 @@ export class JavaChecker {
158
166
  fs.unlink(destPath).catch(() => {});
159
167
  reject(err);
160
168
  });
161
- }).on('error', (err) => {
169
+ });
170
+
171
+ request.on('error', (err) => {
162
172
  fs.unlink(destPath).catch(() => {});
163
173
  reject(err);
164
174
  });
175
+
176
+ request.end();
165
177
  });
166
178
  }
167
179
 
180
+ private static async downloadWithFallback(url: string, destPath: string): Promise<void> {
181
+ const downloaders = [
182
+ this.downloadWithCurl.bind(this),
183
+ this.downloadWithWget.bind(this),
184
+ this.downloadWithNode.bind(this)
185
+ ];
186
+
187
+ for (const downloader of downloaders) {
188
+ try {
189
+ await downloader(url, destPath);
190
+ return;
191
+ } catch (error) {
192
+ const errorMessage = error instanceof Error ? error.message : String(error);
193
+ this.logger.warning(`Download method failed: ${errorMessage}`);
194
+ }
195
+ }
196
+
197
+ throw new Error('All download methods failed');
198
+ }
199
+
200
+ public static async getOrDownloadPortableJava(version: '17' | '21' | '11' | '8' = '17'): Promise<JavaInfo> {
201
+ await fs.ensureDir(this.JAVA_DIR);
202
+
203
+ const javaHome = path.join(this.JAVA_DIR, `jre-${version}`);
204
+ const javaBin = path.join(javaHome, 'bin', 'java');
205
+
206
+ if (await fs.pathExists(javaBin)) {
207
+ this.logger.info(`Portable Java ${version} already exists at ${javaBin}`);
208
+
209
+ try {
210
+ const versionOutput = execSync(`"${javaBin}" -version 2>&1`).toString();
211
+ this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
212
+ return {
213
+ path: javaBin,
214
+ version: version,
215
+ type: 'portable'
216
+ };
217
+ } catch (error) {
218
+ this.logger.warning(`Existing Java seems corrupted, re-downloading...`);
219
+ await fs.remove(javaHome);
220
+ }
221
+ }
222
+
223
+ const urls = this.JAVA_URLS[version] || this.JAVA_URLS['17'];
224
+ let lastError: Error | null = null;
225
+
226
+ for (let i = 0; i < urls.length; i++) {
227
+ const url = urls[i];
228
+ const tarPath = path.join(this.JAVA_DIR, `jre-${version}-${i}.tar.gz`);
229
+
230
+ try {
231
+ this.logger.info(`Downloading portable Java ${version} (attempt ${i + 1}/${urls.length})...`);
232
+ this.logger.info(`URL: ${url}`);
233
+
234
+ await this.downloadWithFallback(url, tarPath);
235
+
236
+ this.logger.info(`Extracting Java ${version}...`);
237
+ await fs.ensureDir(javaHome);
238
+ await tar.extract({
239
+ file: tarPath,
240
+ cwd: javaHome,
241
+ strip: 1
242
+ });
243
+
244
+ await fs.remove(tarPath);
245
+
246
+ await fs.chmod(javaBin, 0o755);
247
+
248
+ this.logger.success(`Portable Java ${version} installed at ${javaBin}`);
249
+
250
+ const versionOutput = execSync(`"${javaBin}" -version 2>&1`).toString();
251
+ this.logger.debug(`Portable Java version: ${versionOutput.split('\n')[0]}`);
252
+
253
+ return {
254
+ path: javaBin,
255
+ version: version,
256
+ type: 'portable'
257
+ };
258
+
259
+ } catch (error) {
260
+ lastError = error instanceof Error ? error : new Error(String(error));
261
+ this.logger.warning(`Attempt ${i + 1} failed: ${lastError.message}`);
262
+ await fs.remove(tarPath).catch(() => {});
263
+ }
264
+ }
265
+
266
+ throw new Error(`Failed to download Java ${version} after ${urls.length} attempts. Last error: ${lastError?.message}`);
267
+ }
268
+
168
269
  public static async ensureJava(version: '17' | '21' | 'auto' = 'auto', usePortable: boolean = true): Promise<JavaInfo> {
169
270
  const targetVersion = version === 'auto' ? '17' : version;
170
271