@phystack/cli 4.4.48 → 4.4.50

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.
@@ -0,0 +1,764 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = cp;
7
+ const child_process_1 = require("child_process");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const net_1 = __importDefault(require("net"));
13
+ const utils_1 = require("../../utils");
14
+ const admin_api_1 = require("../../services/admin-api");
15
+ /**
16
+ * Checks if a string is an IP address
17
+ */
18
+ const isIpAddress = (name) => {
19
+ const octetPattern = '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';
20
+ const ipPattern = new RegExp(`^${octetPattern}\\.${octetPattern}\\.${octetPattern}\\.${octetPattern}$`);
21
+ return ipPattern.test(name);
22
+ };
23
+ /**
24
+ * Parses a device path string (e.g., "device-name:/path/to/file")
25
+ */
26
+ function parseDevicePath(devicePath) {
27
+ const colonIndex = devicePath.indexOf(':');
28
+ if (colonIndex === -1) {
29
+ return null;
30
+ }
31
+ const deviceName = devicePath.substring(0, colonIndex);
32
+ const remotePath = devicePath.substring(colonIndex + 1);
33
+ if (!deviceName || !remotePath) {
34
+ return null;
35
+ }
36
+ return { deviceName, remotePath };
37
+ }
38
+ /**
39
+ * File copy utility using SSH tunnel with base64 encoding for reliable binary transfer.
40
+ */
41
+ class FileCopy {
42
+ constructor(debug = false) {
43
+ this.keyfile = '';
44
+ this.debug = false;
45
+ this.debug = debug;
46
+ }
47
+ debugLog(message) {
48
+ if (this.debug) {
49
+ console.log(chalk_1.default.dim(message));
50
+ }
51
+ }
52
+ async copyFromDevice(deviceName, remotePath, localPath) {
53
+ return new Promise(async (resolve, reject) => {
54
+ console.log(chalk_1.default.blue(`Copying from device: ${deviceName}`));
55
+ console.log(chalk_1.default.dim(` Remote: ${remotePath}`));
56
+ console.log(chalk_1.default.dim(` Local: ${localPath}`));
57
+ let targetPath = localPath;
58
+ if (fs_1.default.existsSync(localPath) && fs_1.default.statSync(localPath).isDirectory()) {
59
+ const remoteFileName = path_1.default.basename(remotePath);
60
+ targetPath = path_1.default.join(localPath, remoteFileName);
61
+ console.log(chalk_1.default.dim(` Target: ${targetPath}`));
62
+ }
63
+ const localDir = path_1.default.dirname(targetPath);
64
+ if (!fs_1.default.existsSync(localDir)) {
65
+ fs_1.default.mkdirSync(localDir, { recursive: true });
66
+ }
67
+ this.keyfile = path_1.default.join(os_1.default.tmpdir(), `gridapp-cp-${Math.floor(Math.random() * 1000)}.key`);
68
+ if (fs_1.default.existsSync(this.keyfile)) {
69
+ fs_1.default.unlinkSync(this.keyfile);
70
+ }
71
+ if (fs_1.default.existsSync(`${this.keyfile}.pub`)) {
72
+ fs_1.default.unlinkSync(`${this.keyfile}.pub`);
73
+ }
74
+ (0, child_process_1.execSync)(`ssh-keygen -t ed25519 -f ${this.keyfile} -N ""`, { stdio: 'ignore' });
75
+ const key = fs_1.default.readFileSync(`${this.keyfile}.pub`).toString();
76
+ let stream;
77
+ let isPhyos = true;
78
+ try {
79
+ this.debugLog('[DEBUG] Starting PhyHub connection...');
80
+ const { stream: curStream, isPhyos: isPhyosDevice } = (0, utils_1.openStream)(await (0, admin_api_1.adminApi)().devices.startPhyHubDeviceShellSession(deviceName, { key }));
81
+ stream = curStream;
82
+ isPhyos = isPhyosDevice;
83
+ this.debugLog(`[DEBUG] PhyHub stream connected, isPhyos: ${isPhyos}`);
84
+ }
85
+ catch (err) {
86
+ if (this.debug) {
87
+ console.log(chalk_1.default.red(`[DEBUG] PhyHub connection failed: ${err.message}`));
88
+ }
89
+ if (err.message && err.message.includes('Unauthorized')) {
90
+ reject(new Error(`Unauthorized. Please run "phy login" to use this command.`));
91
+ }
92
+ else {
93
+ reject(new Error(`Unable to establish connection to the device. ${err}`));
94
+ }
95
+ return;
96
+ }
97
+ const port = Math.floor(10000 + ((Math.random() * 100000) % 10000));
98
+ this.debugLog(`[DEBUG] Creating local TCP server on port ${port}...`);
99
+ let tcpServer = null;
100
+ const connPromise = new Promise((resolveConn) => {
101
+ tcpServer = net_1.default.createServer((client) => {
102
+ this.debugLog('[DEBUG] TCP client connected');
103
+ if (tcpServer) {
104
+ tcpServer.close();
105
+ tcpServer = null;
106
+ }
107
+ resolveConn(client);
108
+ });
109
+ tcpServer.listen(port, () => {
110
+ this.debugLog(`[DEBUG] TCP server listening on port ${port}`);
111
+ });
112
+ });
113
+ this.debugLog(`[DEBUG] Spawning SSH tunnel to ${isPhyos ? 'phystack' : 'ombori'}@localhost:${port}...`);
114
+ const sshTunnel = (0, child_process_1.spawn)('ssh', [
115
+ '-qtt',
116
+ `${isPhyos ? 'phystack' : 'ombori'}@localhost`,
117
+ '-p',
118
+ `${port}`,
119
+ '-o',
120
+ 'UserKnownHostsFile=/dev/null',
121
+ '-o',
122
+ 'StrictHostKeyChecking=no',
123
+ '-o',
124
+ 'ServerAliveInterval=30',
125
+ '-i',
126
+ this.keyfile,
127
+ ], {
128
+ stdio: ['pipe', 'pipe', 'pipe'],
129
+ detached: false,
130
+ });
131
+ const conn = await connPromise;
132
+ this.debugLog('[DEBUG] TCP connection established, piping streams...');
133
+ conn.pipe(stream);
134
+ stream.pipe(conn);
135
+ this.debugLog('[DEBUG] Tunnel established, waiting for shell...');
136
+ const fileStream = fs_1.default.createWriteStream(targetPath);
137
+ let outputBuffer = '';
138
+ let menuHandled = false;
139
+ let commandSent = false;
140
+ let dataReceived = false;
141
+ let bytesWritten = 0;
142
+ let transferComplete = false;
143
+ let resolved = false; // Flag to prevent multiple resolutions
144
+ let expectedFileSize = null;
145
+ let base64Buffer = ''; // Buffer for accumulating base64 data
146
+ sshTunnel.stdout.on('data', (data) => {
147
+ const output = data.toString();
148
+ if (!dataReceived) {
149
+ outputBuffer += output;
150
+ }
151
+ if (!menuHandled) {
152
+ if (outputBuffer.includes('Press ENTER to open the menu') ||
153
+ output.includes('Press ENTER to open the menu')) {
154
+ this.debugLog('[DEBUG] Detected menu prompt, sending ENTER...');
155
+ sshTunnel.stdin?.write('\n');
156
+ outputBuffer = '';
157
+ return;
158
+ }
159
+ if (outputBuffer.includes('Select an option') ||
160
+ output.includes('Select an option') ||
161
+ outputBuffer.includes('Shell (Open shell)') ||
162
+ output.includes('Shell (Open shell)') ||
163
+ outputBuffer.includes('Main menu') ||
164
+ output.includes('Main menu')) {
165
+ menuHandled = true;
166
+ this.debugLog('[DEBUG] Detected menu, selecting shell...');
167
+ sshTunnel.stdin?.write('s\n');
168
+ outputBuffer = '';
169
+ return;
170
+ }
171
+ return;
172
+ }
173
+ if (!commandSent) {
174
+ const promptPattern = /[a-zA-Z0-9_-]+@[a-zA-Z0-9_.-]+[:~]*[\$#]\s*$/;
175
+ const veryEnd = outputBuffer.slice(-50);
176
+ const promptAtVeryEnd = veryEnd.match(promptPattern);
177
+ if (promptAtVeryEnd) {
178
+ commandSent = true;
179
+ this.debugLog('[DEBUG] Shell prompt detected, getting file size...');
180
+ outputBuffer = '';
181
+ process.stdout.write(`Progress: 0% (starting download...)\r`);
182
+ const escapedPath = remotePath.replace(/'/g, "'\\''");
183
+ sshTunnel.stdin?.write(`stat -c%s '${escapedPath}' 2>/dev/null || echo 0\n`);
184
+ return;
185
+ }
186
+ }
187
+ if (commandSent) {
188
+ const outputStr = output.toString();
189
+ if (expectedFileSize === null && !dataReceived) {
190
+ const sizeMatch = outputStr.match(/^(\d+)\s*$/m);
191
+ if (sizeMatch) {
192
+ expectedFileSize = parseInt(sizeMatch[1], 10);
193
+ this.debugLog(`[DEBUG] Expected file size: ${expectedFileSize} bytes`);
194
+ const escapedPath = remotePath.replace(/'/g, "'\\''");
195
+ sshTunnel.stdin?.write(`base64 < '${escapedPath}'\n`);
196
+ return;
197
+ }
198
+ const promptPattern = /[a-zA-Z0-9_-]+@[a-zA-Z0-9_.-]+[:~]*[\$#]\s*$/;
199
+ if (promptPattern.test(outputStr) && outputStr.trim().length < 100) {
200
+ this.debugLog('[DEBUG] No file size received, proceeding with base64...');
201
+ const escapedPath = remotePath.replace(/'/g, "'\\''");
202
+ sshTunnel.stdin?.write(`base64 < '${escapedPath}'\n`);
203
+ return;
204
+ }
205
+ }
206
+ if (expectedFileSize !== null) {
207
+ dataReceived = true;
208
+ const escapedPath = remotePath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
209
+ let cleanBase64 = outputStr
210
+ .replace(/stat.*?\n/g, '')
211
+ .replace(new RegExp(`base64.*?${escapedPath}.*?\\n?`, 'gi'), '') // Remove command echo with path
212
+ .replace(/base64.*?<.*?\\n?/g, '') // Remove "base64 < 'path'" patterns
213
+ .replace(/base64.*?\\n?/g, '') // Remove any remaining "base64" command echoes
214
+ .replace(/[a-zA-Z0-9_-]+@[a-zA-Z0-9_.-]+[:~]*[\$#]\s*/g, '')
215
+ .replace(/[\r\n]+$/, '')
216
+ .replace(/^[\r\n]+/, '');
217
+ cleanBase64 = cleanBase64.replace(/[^A-Za-z0-9+\/=]/g, '');
218
+ if (cleanBase64.length > 0) {
219
+ base64Buffer += cleanBase64;
220
+ const minVerifyLength = 8;
221
+ if (base64Buffer.length >= minVerifyLength && bytesWritten === 0) {
222
+ let foundStart = false;
223
+ for (let offset = 0; offset <= Math.min(20, base64Buffer.length - minVerifyLength); offset += 4) {
224
+ try {
225
+ const testChunk = base64Buffer.slice(offset, offset + 8);
226
+ const testDecoded = Buffer.from(testChunk, 'base64');
227
+ if (testDecoded.length >= 4) {
228
+ const magic = testDecoded.slice(0, 4);
229
+ if (magic[0] === 0x7f &&
230
+ magic[1] === 0x45 &&
231
+ magic[2] === 0x4c &&
232
+ magic[3] === 0x46) {
233
+ this.debugLog(`[DEBUG] Found ELF magic at offset ${offset}, removing ${offset} chars of garbage`);
234
+ base64Buffer = base64Buffer.slice(offset);
235
+ foundStart = true;
236
+ break;
237
+ }
238
+ }
239
+ }
240
+ catch (error) {
241
+ this.debugLog(`[DEBUG] Error searching for ELF magic: ${error}`);
242
+ }
243
+ }
244
+ if (!foundStart && base64Buffer.length > 50) {
245
+ if (this.debug) {
246
+ console.log(chalk_1.default.yellow(`[DEBUG] Warning: Could not find ELF magic in first ${base64Buffer.length} base64 chars`));
247
+ this.debugLog(`[DEBUG] First 50 chars: ${base64Buffer.slice(0, 50)}`);
248
+ }
249
+ }
250
+ else if (foundStart) {
251
+ this.debugLog(`[DEBUG] Note: Removed ${base64Buffer.length === 0 ? 'garbage' : 'initial garbage'} from base64 stream`);
252
+ }
253
+ }
254
+ const decodeLength = Math.floor(base64Buffer.length / 4) * 4;
255
+ if (decodeLength > 0) {
256
+ try {
257
+ const toDecode = base64Buffer.slice(0, decodeLength);
258
+ const decoded = Buffer.from(toDecode, 'base64');
259
+ if (bytesWritten === 0 && decoded.length >= 4) {
260
+ const firstBytes = Array.from(decoded.slice(0, 4))
261
+ .map((byte) => '0x' + byte.toString(16).padStart(2, '0'))
262
+ .join(' ');
263
+ this.debugLog(`[DEBUG] First decoded bytes: ${firstBytes} (should be 0x7f 0x45 0x4c 0x46 for ELF)`);
264
+ this.debugLog(`[DEBUG] First 20 base64 chars were: ${toDecode.slice(0, 20)}`);
265
+ }
266
+ if (decoded.length > 0) {
267
+ if (bytesWritten + decoded.length >= expectedFileSize) {
268
+ const bytesToWrite = expectedFileSize - bytesWritten;
269
+ if (bytesToWrite > 0) {
270
+ this.debugLog(`[DEBUG] Reached expected size, truncating (writing ${bytesToWrite} of ${decoded.length} bytes, total: ${bytesWritten +
271
+ bytesToWrite}/${expectedFileSize})`);
272
+ fileStream.write(decoded.slice(0, bytesToWrite));
273
+ bytesWritten = expectedFileSize;
274
+ transferComplete = true;
275
+ fileStream.end();
276
+ if (!resolved) {
277
+ resolved = true;
278
+ process.stdout.write('\r' + ' '.repeat(80) + '\r');
279
+ stream.destroy();
280
+ conn.destroy();
281
+ if (tcpServer) {
282
+ tcpServer.close();
283
+ tcpServer = null;
284
+ }
285
+ try {
286
+ sshTunnel.kill('SIGTERM');
287
+ }
288
+ catch (error) {
289
+ this.debugLog(`[DEBUG] Error killing SSH process: ${error}`);
290
+ }
291
+ setTimeout(() => {
292
+ try {
293
+ if (!sshTunnel.killed) {
294
+ sshTunnel.kill('SIGKILL');
295
+ }
296
+ }
297
+ catch (error) {
298
+ this.debugLog(`[DEBUG] Error force killing SSH process: ${error}`);
299
+ }
300
+ }, 100);
301
+ console.log(chalk_1.default.green('✓ Copy completed successfully'));
302
+ resolve();
303
+ }
304
+ return;
305
+ }
306
+ else {
307
+ if (!resolved) {
308
+ resolved = true;
309
+ transferComplete = true;
310
+ fileStream.end();
311
+ setTimeout(() => {
312
+ sshTunnel.kill();
313
+ stream.destroy();
314
+ console.log(chalk_1.default.green('✓ Copy completed successfully'));
315
+ resolve();
316
+ }, 100);
317
+ }
318
+ return;
319
+ }
320
+ }
321
+ else {
322
+ fileStream.write(decoded);
323
+ bytesWritten += decoded.length;
324
+ const percentage = (bytesWritten / expectedFileSize) * 100;
325
+ const lastLoggedPercentage = Math.floor(((bytesWritten - decoded.length) / expectedFileSize) * 100);
326
+ const currentPercentage = Math.floor(percentage);
327
+ if (currentPercentage !== lastLoggedPercentage &&
328
+ currentPercentage % 5 === 0) {
329
+ process.stdout.write(`\rProgress: ${currentPercentage.toFixed(0)}% (${bytesWritten}/${expectedFileSize} bytes)`);
330
+ }
331
+ else if (bytesWritten % 102400 < decoded.length) {
332
+ this.debugLog(`[DEBUG] Written ${bytesWritten}/${expectedFileSize} bytes (${percentage.toFixed(1)}%)`);
333
+ }
334
+ }
335
+ }
336
+ base64Buffer = base64Buffer.slice(decodeLength);
337
+ }
338
+ catch (err) {
339
+ if (this.debug) {
340
+ console.log(chalk_1.default.red(`[DEBUG] Base64 decode error: ${err}`));
341
+ this.debugLog(`[DEBUG] Base64 buffer length: ${base64Buffer.length}, decodeLength: ${decodeLength}`);
342
+ this.debugLog(`[DEBUG] First 100 chars of buffer: ${base64Buffer.slice(0, 100)}`);
343
+ }
344
+ }
345
+ }
346
+ }
347
+ const promptPattern = /[a-zA-Z0-9_-]+@[a-zA-Z0-9_.-]+[:~]*[\$#]\s*$/;
348
+ if (promptPattern.test(outputStr) &&
349
+ bytesWritten >= expectedFileSize &&
350
+ !transferComplete &&
351
+ !resolved) {
352
+ this.debugLog('[DEBUG] Detected prompt after expected size, transfer complete');
353
+ if (!resolved) {
354
+ resolved = true;
355
+ transferComplete = true;
356
+ fileStream.end();
357
+ // Clear progress line and show completion
358
+ process.stdout.write('\r' + ' '.repeat(80) + '\r');
359
+ // Destroy streams immediately
360
+ stream.destroy();
361
+ conn.destroy();
362
+ if (tcpServer) {
363
+ tcpServer.close();
364
+ tcpServer = null;
365
+ }
366
+ // Kill SSH process immediately
367
+ try {
368
+ sshTunnel.kill('SIGTERM');
369
+ }
370
+ catch (error) {
371
+ this.debugLog(`[DEBUG] Error killing SSH process: ${error}`);
372
+ }
373
+ setTimeout(() => {
374
+ try {
375
+ if (!sshTunnel.killed) {
376
+ sshTunnel.kill('SIGKILL');
377
+ }
378
+ }
379
+ catch (error) {
380
+ this.debugLog(`[DEBUG] Error force killing SSH process: ${error}`);
381
+ }
382
+ }, 100);
383
+ console.log(chalk_1.default.green('✓ Copy completed successfully'));
384
+ resolve();
385
+ }
386
+ return;
387
+ }
388
+ return;
389
+ }
390
+ }
391
+ });
392
+ sshTunnel.stderr.on('data', (data) => {
393
+ const output = data.toString();
394
+ if (!output.includes('phyhub') && !output.includes('connect()')) {
395
+ if (output.trim()) {
396
+ this.debugLog(`[DEBUG] SSH stderr: ${output.substring(0, 200)}`);
397
+ }
398
+ }
399
+ });
400
+ sshTunnel.on('error', (error) => {
401
+ if (this.debug) {
402
+ console.log(chalk_1.default.red(`[DEBUG] SSH error: ${error.message}`));
403
+ }
404
+ fileStream.close();
405
+ stream.destroy();
406
+ reject(error);
407
+ });
408
+ setTimeout(() => {
409
+ if (!commandSent) {
410
+ sshTunnel.kill();
411
+ fileStream.close();
412
+ stream.destroy();
413
+ reject(new Error('Timeout waiting for shell prompt'));
414
+ }
415
+ }, 300000);
416
+ sshTunnel.on('close', (code) => {
417
+ this.debugLog(`[DEBUG] SSH process closed with code ${code}`);
418
+ if (!resolved) {
419
+ if (!fileStream.destroyed) {
420
+ fileStream.end();
421
+ }
422
+ stream.destroy();
423
+ conn.destroy();
424
+ if (tcpServer) {
425
+ tcpServer.close();
426
+ tcpServer = null;
427
+ }
428
+ setTimeout(() => {
429
+ try {
430
+ if (fs_1.default.existsSync(this.keyfile)) {
431
+ fs_1.default.unlinkSync(this.keyfile);
432
+ }
433
+ if (fs_1.default.existsSync(`${this.keyfile}.pub`)) {
434
+ fs_1.default.unlinkSync(`${this.keyfile}.pub`);
435
+ }
436
+ }
437
+ catch (error) {
438
+ this.debugLog(`[DEBUG] Error cleaning up key file: ${error}`);
439
+ }
440
+ }, 1000);
441
+ if (code !== 0 && code !== null && !commandSent) {
442
+ fileStream.close();
443
+ reject(new Error(`SSH exited with code ${code}`));
444
+ }
445
+ else if (!dataReceived) {
446
+ reject(new Error(`No data received. File may not exist or be empty.`));
447
+ }
448
+ else {
449
+ setTimeout(() => {
450
+ try {
451
+ if (fs_1.default.existsSync(targetPath)) {
452
+ const fileContent = fs_1.default.readFileSync(targetPath);
453
+ if (expectedFileSize !== null &&
454
+ fileContent.length !== expectedFileSize) {
455
+ if (fileContent.length > expectedFileSize) {
456
+ const trimmed = fileContent.slice(0, expectedFileSize);
457
+ fs_1.default.writeFileSync(targetPath, trimmed);
458
+ this.debugLog(`[DEBUG] Trimmed file to expected size (${fileContent.length} -> ${expectedFileSize} bytes)`);
459
+ }
460
+ else {
461
+ if (this.debug) {
462
+ console.log(chalk_1.default.yellow(`[DEBUG] Warning: File is ${expectedFileSize -
463
+ fileContent.length} bytes smaller than expected`));
464
+ }
465
+ }
466
+ }
467
+ }
468
+ }
469
+ catch (err) {
470
+ this.debugLog(`[DEBUG] Error in final cleanup: ${err}`);
471
+ }
472
+ if (!resolved) {
473
+ resolved = true;
474
+ console.log(chalk_1.default.green('✓ Copy completed successfully'));
475
+ resolve();
476
+ }
477
+ }, 200);
478
+ }
479
+ }
480
+ });
481
+ });
482
+ }
483
+ async copyToDevice(deviceName, localPath, remotePath) {
484
+ return new Promise(async (resolve, reject) => {
485
+ console.log(chalk_1.default.blue(`Copying to device: ${deviceName}`));
486
+ console.log(chalk_1.default.dim(` Local: ${localPath}`));
487
+ console.log(chalk_1.default.dim(` Remote: ${remotePath}`));
488
+ if (!fs_1.default.existsSync(localPath)) {
489
+ reject(new Error(`Local file not found: ${localPath}`));
490
+ return;
491
+ }
492
+ let targetRemotePath = remotePath;
493
+ if (remotePath.endsWith('/')) {
494
+ const localFileName = path_1.default.basename(localPath);
495
+ targetRemotePath = path_1.default.join(remotePath, localFileName).replace(/\\/g, '/');
496
+ console.log(chalk_1.default.dim(` Target: ${targetRemotePath}`));
497
+ }
498
+ this.keyfile = path_1.default.join(os_1.default.tmpdir(), `gridapp-cp-${Math.floor(Math.random() * 1000)}.key`);
499
+ if (fs_1.default.existsSync(this.keyfile)) {
500
+ fs_1.default.unlinkSync(this.keyfile);
501
+ }
502
+ if (fs_1.default.existsSync(`${this.keyfile}.pub`)) {
503
+ fs_1.default.unlinkSync(`${this.keyfile}.pub`);
504
+ }
505
+ (0, child_process_1.execSync)(`ssh-keygen -t ed25519 -f ${this.keyfile} -N ""`, { stdio: 'ignore' });
506
+ const key = fs_1.default.readFileSync(`${this.keyfile}.pub`).toString();
507
+ let stream;
508
+ let isPhyos = true;
509
+ try {
510
+ this.debugLog('[DEBUG] Starting PhyHub connection...');
511
+ const { stream: curStream, isPhyos: isPhyosDevice } = (0, utils_1.openStream)(await (0, admin_api_1.adminApi)().devices.startPhyHubDeviceShellSession(deviceName, { key }));
512
+ stream = curStream;
513
+ isPhyos = isPhyosDevice;
514
+ this.debugLog(`[DEBUG] PhyHub stream connected, isPhyos: ${isPhyos}`);
515
+ }
516
+ catch (err) {
517
+ if (this.debug) {
518
+ console.log(chalk_1.default.red(`[DEBUG] PhyHub connection failed: ${err.message}`));
519
+ }
520
+ if (err.message && err.message.includes('Unauthorized')) {
521
+ reject(new Error(`Unauthorized. Please run "phy login" to use this command.`));
522
+ }
523
+ else {
524
+ reject(new Error(`Unable to establish connection to the device. ${err}`));
525
+ }
526
+ return;
527
+ }
528
+ const port = Math.floor(10000 + ((Math.random() * 100000) % 10000));
529
+ this.debugLog(`[DEBUG] Creating local TCP server on port ${port}...`);
530
+ let tcpServer = null;
531
+ const connPromise = new Promise((resolveConn) => {
532
+ tcpServer = net_1.default.createServer((client) => {
533
+ this.debugLog('[DEBUG] TCP client connected');
534
+ if (tcpServer) {
535
+ tcpServer.close();
536
+ tcpServer = null;
537
+ }
538
+ resolveConn(client);
539
+ });
540
+ tcpServer.listen(port, () => {
541
+ this.debugLog(`[DEBUG] TCP server listening on port ${port}`);
542
+ });
543
+ });
544
+ this.debugLog(`[DEBUG] Spawning SSH tunnel to ${isPhyos ? 'phystack' : 'ombori'}@localhost:${port}...`);
545
+ const sshTunnel = (0, child_process_1.spawn)('ssh', [
546
+ '-qtt',
547
+ `${isPhyos ? 'phystack' : 'ombori'}@localhost`,
548
+ '-p',
549
+ `${port}`,
550
+ '-o',
551
+ 'UserKnownHostsFile=/dev/null',
552
+ '-o',
553
+ 'StrictHostKeyChecking=no',
554
+ '-o',
555
+ 'ServerAliveInterval=30',
556
+ '-i',
557
+ this.keyfile,
558
+ ], {
559
+ stdio: ['pipe', 'pipe', 'pipe'],
560
+ detached: false,
561
+ });
562
+ const conn = await connPromise;
563
+ this.debugLog('[DEBUG] TCP connection established, piping streams...');
564
+ conn.pipe(stream);
565
+ stream.pipe(conn);
566
+ this.debugLog('[DEBUG] Tunnel established, waiting for shell...');
567
+ let outputBuffer = '';
568
+ let menuHandled = false;
569
+ let commandSent = false;
570
+ let transferComplete = false; // Flag to prevent multiple completions
571
+ let resolved = false; // Flag to prevent multiple resolutions
572
+ const fileContent = fs_1.default.readFileSync(localPath);
573
+ const fileSize = fileContent.length;
574
+ const fileBase64 = fileContent.toString('base64');
575
+ let bytesSent = 0; // Track bytes sent for progress
576
+ sshTunnel.stdout.on('data', (data) => {
577
+ const output = data.toString();
578
+ if (!commandSent) {
579
+ outputBuffer += output;
580
+ }
581
+ if (!menuHandled) {
582
+ if (outputBuffer.includes('Press ENTER to open the menu') ||
583
+ output.includes('Press ENTER to open the menu')) {
584
+ this.debugLog('[DEBUG] Detected menu prompt, sending ENTER...');
585
+ sshTunnel.stdin?.write('\n');
586
+ outputBuffer = '';
587
+ return;
588
+ }
589
+ if (outputBuffer.includes('Select an option') ||
590
+ output.includes('Select an option') ||
591
+ outputBuffer.includes('Shell (Open shell)') ||
592
+ output.includes('Shell (Open shell)') ||
593
+ outputBuffer.includes('Main menu') ||
594
+ output.includes('Main menu')) {
595
+ menuHandled = true;
596
+ this.debugLog('[DEBUG] Detected menu, selecting shell...');
597
+ sshTunnel.stdin?.write('s\n');
598
+ outputBuffer = '';
599
+ return;
600
+ }
601
+ return;
602
+ }
603
+ if (!commandSent) {
604
+ const promptPattern = /[a-zA-Z0-9_-]+@[a-zA-Z0-9_.-]+[:~]*[\$#]\s*$/;
605
+ const veryEnd = outputBuffer.slice(-50);
606
+ const promptAtVeryEnd = veryEnd.match(promptPattern);
607
+ if (promptAtVeryEnd) {
608
+ commandSent = true;
609
+ this.debugLog('[DEBUG] Shell prompt detected, copying file...');
610
+ outputBuffer = '';
611
+ process.stdout.write(`Progress: 0% (sending file...)\r`);
612
+ const escapedPath = targetRemotePath.replace(/'/g, "'\\''");
613
+ const script = `cat > /tmp/cp_script.sh << 'EOFSCRIPT'
614
+ #!/bin/bash
615
+ echo '${fileBase64}' | base64 -d > '${escapedPath}'
616
+ EOFSCRIPT
617
+ chmod +x /tmp/cp_script.sh
618
+ /tmp/cp_script.sh
619
+ rm /tmp/cp_script.sh
620
+ echo "DONE"
621
+ `;
622
+ sshTunnel.stdin?.write(script);
623
+ return;
624
+ }
625
+ }
626
+ if (commandSent && output.includes('DONE') && !transferComplete) {
627
+ transferComplete = true;
628
+ this.debugLog('[DEBUG] File copy completed on remote side');
629
+ if (!resolved) {
630
+ resolved = true;
631
+ // Clear progress line and show completion
632
+ process.stdout.write('\r' + ' '.repeat(80) + '\r');
633
+ // Destroy streams immediately
634
+ stream.destroy();
635
+ conn.destroy();
636
+ if (tcpServer) {
637
+ tcpServer.close();
638
+ tcpServer = null;
639
+ }
640
+ try {
641
+ sshTunnel.kill('SIGTERM');
642
+ }
643
+ catch (error) {
644
+ this.debugLog(`[DEBUG] Error killing SSH process: ${error}`);
645
+ }
646
+ setTimeout(() => {
647
+ try {
648
+ if (!sshTunnel.killed) {
649
+ sshTunnel.kill('SIGKILL');
650
+ }
651
+ }
652
+ catch (error) {
653
+ this.debugLog(`[DEBUG] Error force killing SSH process: ${error}`);
654
+ }
655
+ }, 100);
656
+ console.log(chalk_1.default.green('✓ Copy completed successfully'));
657
+ resolve();
658
+ }
659
+ }
660
+ if (commandSent &&
661
+ !transferComplete &&
662
+ output.length > 0 &&
663
+ !output.includes('DONE')) {
664
+ bytesSent += output.length;
665
+ const estimatedProgress = Math.min(95, (bytesSent / (fileBase64.length * 1.2)) * 100);
666
+ const lastProgress = Math.floor(((bytesSent - output.length) / (fileBase64.length * 1.2)) * 100);
667
+ const currentProgress = Math.floor(estimatedProgress);
668
+ if (currentProgress !== lastProgress && currentProgress % 5 === 0) {
669
+ process.stdout.write(`\rProgress: ${currentProgress.toFixed(0)}% (sending file...)`);
670
+ }
671
+ }
672
+ });
673
+ sshTunnel.stderr.on('data', (data) => {
674
+ const output = data.toString();
675
+ if (!output.includes('phyhub') && !output.includes('connect()')) {
676
+ if (output.trim()) {
677
+ this.debugLog(`[DEBUG] SSH stderr: ${output.substring(0, 200)}`);
678
+ }
679
+ }
680
+ });
681
+ sshTunnel.on('error', (error) => {
682
+ if (this.debug) {
683
+ console.log(chalk_1.default.red(`[DEBUG] SSH error: ${error.message}`));
684
+ }
685
+ stream.destroy();
686
+ reject(error);
687
+ });
688
+ setTimeout(() => {
689
+ if (!commandSent) {
690
+ sshTunnel.kill();
691
+ stream.destroy();
692
+ reject(new Error('Timeout waiting for shell prompt'));
693
+ }
694
+ }, 300000);
695
+ sshTunnel.on('close', (code) => {
696
+ this.debugLog(`[DEBUG] SSH process closed with code ${code}`);
697
+ if (!resolved) {
698
+ stream.destroy();
699
+ conn.destroy();
700
+ if (tcpServer) {
701
+ tcpServer.close();
702
+ tcpServer = null;
703
+ }
704
+ setTimeout(() => {
705
+ try {
706
+ if (fs_1.default.existsSync(this.keyfile)) {
707
+ fs_1.default.unlinkSync(this.keyfile);
708
+ }
709
+ if (fs_1.default.existsSync(`${this.keyfile}.pub`)) {
710
+ fs_1.default.unlinkSync(`${this.keyfile}.pub`);
711
+ }
712
+ }
713
+ catch (error) {
714
+ this.debugLog(`[DEBUG] Error cleaning up key file: ${error}`);
715
+ }
716
+ }, 1000);
717
+ if (code !== 0 && code !== null && !commandSent) {
718
+ reject(new Error(`SSH exited with code ${code}`));
719
+ }
720
+ else if (commandSent && !outputBuffer.includes('DONE') && !transferComplete) {
721
+ reject(new Error(`File copy may have failed. Check remote path: ${targetRemotePath}`));
722
+ }
723
+ else if (!resolved && transferComplete) {
724
+ resolved = true;
725
+ console.log(chalk_1.default.green('✓ Copy completed successfully'));
726
+ resolve();
727
+ }
728
+ }
729
+ });
730
+ });
731
+ }
732
+ }
733
+ async function cp(source, destination, options = {}) {
734
+ try {
735
+ const fileCopy = new FileCopy(options.verbose || false);
736
+ const sourceDevice = parseDevicePath(source);
737
+ if (sourceDevice) {
738
+ await fileCopy.copyFromDevice(sourceDevice.deviceName, sourceDevice.remotePath, destination);
739
+ setTimeout(() => {
740
+ process.exit(0);
741
+ }, 500);
742
+ return;
743
+ }
744
+ const destDevice = parseDevicePath(destination);
745
+ if (destDevice) {
746
+ await fileCopy.copyToDevice(destDevice.deviceName, source, destDevice.remotePath);
747
+ setTimeout(() => {
748
+ process.exit(0);
749
+ }, 500);
750
+ return;
751
+ }
752
+ throw new Error('At least one path must be a device path (format: device-name:/path/to/file)');
753
+ }
754
+ catch (error) {
755
+ console.error(chalk_1.default.red(`Failed to copy: ${error.message}`));
756
+ if (error.message.includes('file not found')) {
757
+ console.error(chalk_1.default.yellow('Hint: Make sure the file exists and you have permission to access it.'));
758
+ }
759
+ setTimeout(() => {
760
+ process.exit(1);
761
+ }, 500);
762
+ }
763
+ }
764
+ //# sourceMappingURL=cp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/commands/dev/cp.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,12 @@ const url_1 = __importDefault(require("url"));
14
14
  const admin_api_1 = require("../../services/admin-api");
15
15
  async function forward(deviceName, fwdUrl, options) {
16
16
  try {
17
+ const { user } = options || {};
18
+ // Validate -u option: only "phygrid" is allowed
19
+ if (user && user !== 'phygrid') {
20
+ throw new Error(`Invalid user option. Only "phygrid" is supported.`);
21
+ }
22
+ const usePhygrid = user === 'phygrid';
17
23
  const parsed = url_1.default.parse(fwdUrl);
18
24
  const isHttp = parsed.protocol === 'http:';
19
25
  const isHttps = parsed.protocol === 'https:';
@@ -53,8 +59,16 @@ async function forward(deviceName, fwdUrl, options) {
53
59
  });
54
60
  server.listen(port, () => console.log(chalk_1.default.dim(`> ssh listening on port ${chalk_1.default.blue(port)}`)));
55
61
  });
62
+ // Determine username based on isPhyos and -u phygrid option
63
+ const sshUsername = isPhyos ? (usePhygrid ? 'phygrid' : 'phystack') : 'ombori';
64
+ if (usePhygrid) {
65
+ console.log(chalk_1.default.dim('> NOTE: Connecting to PhyOS devices with phygrid user'));
66
+ }
67
+ else {
68
+ console.log(chalk_1.default.dim('> NOTE: Connecting to PhyOS devices with phystack user'));
69
+ }
56
70
  child_process_1.default.spawn('ssh', [
57
- `${isPhyos ? 'phystack' : 'ombori'}@localhost`,
71
+ `${sshUsername}@localhost`,
58
72
  '-L',
59
73
  `0.0.0.0:${fwdPort}:${remoteHost}:${remotePort}`,
60
74
  '-p',
@@ -1 +1 @@
1
- {"version":3,"file":"forward.js","sourceRoot":"","sources":["../../../src/commands/dev/forward.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forward.js","sourceRoot":"","sources":["../../../src/commands/dev/forward.ts"],"names":[],"mappings":"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"}
@@ -12,14 +12,17 @@ const screen_devtools_1 = __importDefault(require("./screen-devtools"));
12
12
  const list_1 = __importDefault(require("./list"));
13
13
  const select_1 = __importDefault(require("./select"));
14
14
  const develop_1 = __importDefault(require("./develop"));
15
+ const cp_1 = __importDefault(require("./cp"));
15
16
  const dev = commander_1.default.command('dev').description('Compute devices management');
16
17
  // Shell command
17
18
  dev
18
19
  .command('shell <device>')
19
20
  .option('-L <ip>:<port>', 'Forward remote port to a local machine')
21
+ .option('-u, --user <user>', 'Username for PhyOS devices (only "phygrid" is supported)')
20
22
  .description('Open a shell session to a device via PhyHub')
21
23
  .usage('<device> - open shell via PhyHub')
22
24
  .usage('-L <host>:<port> <device> - open shell and forward a remote port')
25
+ .usage('-u phygrid <device> - connect to PhyOS devices with phygrid user')
23
26
  .action((0, utils_1.handleError)(shell_1.default));
24
27
  // VNC command
25
28
  dev
@@ -29,7 +32,10 @@ dev
29
32
  // Forward command
30
33
  dev
31
34
  .command('forward <device> <url>')
35
+ .option('-u, --user <user>', 'Username for PhyOS devices (only "phygrid" is supported)')
32
36
  .description("Access a url from device's local network via PhyHub")
37
+ .usage('<device> <url> - forward url via PhyHub')
38
+ .usage('-u phygrid <device> <url> - connect to PhyOS devices with phygrid user')
33
39
  .action((0, utils_1.handleError)(forward_1.default));
34
40
  // Screen DevTools command
35
41
  dev
@@ -61,6 +67,14 @@ dev
61
67
  .option('--export', 'Output export commands for bash/zsh shells')
62
68
  .option('--export-powershell', 'Output export commands for PowerShell')
63
69
  .action((0, utils_1.handleError)(develop_1.default));
70
+ // Copy command
71
+ dev
72
+ .command('cp <source> <destination>')
73
+ .description('Copy files between local machine and device')
74
+ .option('-d, --verbose', 'Show verbose logs')
75
+ .usage('<device>:<path> <local-path>')
76
+ .usage('<local-path> <device>:<path>')
77
+ .action((0, utils_1.handleError)(cp_1.default));
64
78
  // Other commands for new devices will be added here
65
79
  exports.default = dev;
66
80
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAAgC;AAChC,uCAA0C;AAC1C,oDAA4B;AAC5B,gDAAwB;AACxB,wDAAgC;AAChC,wEAA+C;AAC/C,kDAA0B;AAC1B,sDAA8B;AAC9B,wDAAgC;AAEhC,MAAM,GAAG,GAAG,mBAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;AAE7E,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,gBAAgB,CAAC;KACzB,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;KAClE,WAAW,CAAC,6CAA6C,CAAC;KAC1D,KAAK,CAAC,kCAAkC,CAAC;KACzC,KAAK,CAAC,kEAAkE,CAAC;KACzE,MAAM,CAAC,IAAA,mBAAW,EAAC,eAAK,CAAC,CAAC,CAAC;AAE9B,cAAc;AACd,GAAG;KACA,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,IAAA,mBAAW,EAAC,aAAG,CAAC,CAAC,CAAC;AAE5B,kBAAkB;AAClB,GAAG;KACA,OAAO,CAAC,wBAAwB,CAAC;KACjC,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,IAAA,mBAAW,EAAC,iBAAO,CAAC,CAAC,CAAC;AAEhC,0BAA0B;AAC1B,GAAG;KACA,OAAO,CAAC,0BAA0B,CAAC;KACnC,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;KAChE,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,IAAA,mBAAW,EAAC,yBAAc,CAAC,CAAC,CAAC;AAEvC,uBAAuB;AACvB,GAAG;KACA,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,EAAE,QAAQ,CAAC;KAC1E,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,EAAE,QAAQ,CAAC;KACjE,MAAM,CAAC,iBAAiB,EAAE,qEAAqE,CAAC;KAChG,MAAM,CAAC,IAAA,mBAAW,EAAC,cAAI,CAAC,CAAC,CAAC;AAE7B,wBAAwB;AACxB,GAAG;KACA,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;KAC3C,MAAM,CAAC,IAAA,mBAAW,EAAC,gBAAM,CAAC,CAAC,CAAC;AAE/B,kBAAkB;AAClB,GAAG;KACA,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CACV,0FAA0F,CAC3F;KACA,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;KACnE,MAAM,CAAC,UAAU,EAAE,4CAA4C,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;KACtE,MAAM,CAAC,IAAA,mBAAW,EAAC,iBAAO,CAAC,CAAC,CAAC;AAEhC,oDAAoD;AAEpD,kBAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,12 @@ const utils_1 = require("../../utils");
16
16
  const admin_api_1 = require("../../services/admin-api");
17
17
  async function shellImpl(deviceName, options) {
18
18
  let forward = options.L;
19
- const { silent, detached } = options;
19
+ const { silent, detached, user } = options;
20
+ // Validate -u option: only "phygrid" is allowed
21
+ if (user && user !== 'phygrid') {
22
+ throw new Error(`Invalid user option. Only "phygrid" is supported.`);
23
+ }
24
+ const usePhygrid = user === 'phygrid';
20
25
  if (!silent)
21
26
  console.log(chalk_1.default.dim('> creating keypair'));
22
27
  const keyfile = path_1.default.join(os_1.default.tmpdir(), `gridapp${Math.floor(Math.random() * 1000)}.key`);
@@ -102,9 +107,19 @@ async function shellImpl(deviceName, options) {
102
107
  });
103
108
  });
104
109
  const fwdOptions = forward ? ['-L', `0.0.0.0:${fwdPort}:${forward}`] : [];
110
+ // Determine username based on isPhyos and -u phygrid option
111
+ const sshUsername = isPhyos ? (usePhygrid ? 'phygrid' : 'phystack') : 'ombori';
112
+ if (!silent) {
113
+ if (usePhygrid) {
114
+ console.log(chalk_1.default.dim('> NOTE: Connecting to PhyOS devices with phygrid user'));
115
+ }
116
+ else {
117
+ console.log(chalk_1.default.dim('> NOTE: Connecting to PhyOS devices with phystack user'));
118
+ }
119
+ }
105
120
  const sshProcess = child_process_1.default.spawn('ssh', [
106
121
  '-qtt',
107
- `${isPhyos ? 'phystack' : 'ombori'}@localhost`,
122
+ `${sshUsername}@localhost`,
108
123
  ...fwdOptions,
109
124
  '-p',
110
125
  `${port}`,
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/commands/dev/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/commands/dev/shell.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phystack/cli",
3
- "version": "4.4.48",
3
+ "version": "4.4.50",
4
4
  "description": "Phygrid CLI.",
5
5
  "main": "index.js",
6
6
  "homepage": "./",
@@ -99,5 +99,5 @@
99
99
  "string-width": "^4.2.3",
100
100
  "strip-ansi": "^6.0.1"
101
101
  },
102
- "gitHead": "4e5f69767d873b63d8c890dfa66da896e6cf1493"
102
+ "gitHead": "5e6504c3c3ca550f34605fc66625d9efdc7eb355"
103
103
  }