@phystack/cli 4.3.40-dev

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 (192) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +24 -0
  3. package/bin/index.js +2 -0
  4. package/dist/commands/app/build-apps.js +66 -0
  5. package/dist/commands/app/build-apps.js.map +1 -0
  6. package/dist/commands/app/build-container-remote.js +171 -0
  7. package/dist/commands/app/build-container-remote.js.map +1 -0
  8. package/dist/commands/app/build-container.js +330 -0
  9. package/dist/commands/app/build-container.js.map +1 -0
  10. package/dist/commands/app/build.js +393 -0
  11. package/dist/commands/app/build.js.map +1 -0
  12. package/dist/commands/app/create.js +451 -0
  13. package/dist/commands/app/create.js.map +1 -0
  14. package/dist/commands/app/deploy.js +176 -0
  15. package/dist/commands/app/deploy.js.map +1 -0
  16. package/dist/commands/app/device-picker.js +150 -0
  17. package/dist/commands/app/device-picker.js.map +1 -0
  18. package/dist/commands/app/import.js +303 -0
  19. package/dist/commands/app/import.js.map +1 -0
  20. package/dist/commands/app/list.js +26 -0
  21. package/dist/commands/app/list.js.map +1 -0
  22. package/dist/commands/app/publish.js +327 -0
  23. package/dist/commands/app/publish.js.map +1 -0
  24. package/dist/commands/app/settings.js +129 -0
  25. package/dist/commands/app/settings.js.map +1 -0
  26. package/dist/commands/app/types.js +13 -0
  27. package/dist/commands/app/types.js.map +1 -0
  28. package/dist/commands/app/upload-description.js +139 -0
  29. package/dist/commands/app/upload-description.js.map +1 -0
  30. package/dist/commands/app/upload-settings.js +29 -0
  31. package/dist/commands/app/upload-settings.js.map +1 -0
  32. package/dist/commands/app/utils.js +86 -0
  33. package/dist/commands/app/utils.js.map +1 -0
  34. package/dist/commands/auth/login.js +111 -0
  35. package/dist/commands/auth/login.js.map +1 -0
  36. package/dist/commands/auth/logout.js +19 -0
  37. package/dist/commands/auth/logout.js.map +1 -0
  38. package/dist/commands/descriptor/create.js +143 -0
  39. package/dist/commands/descriptor/create.js.map +1 -0
  40. package/dist/commands/descriptor/index.js +36 -0
  41. package/dist/commands/descriptor/index.js.map +1 -0
  42. package/dist/commands/descriptor/publish.js +163 -0
  43. package/dist/commands/descriptor/publish.js.map +1 -0
  44. package/dist/commands/descriptor/show.js +68 -0
  45. package/dist/commands/descriptor/show.js.map +1 -0
  46. package/dist/commands/dev/develop.js +175 -0
  47. package/dist/commands/dev/develop.js.map +1 -0
  48. package/dist/commands/dev/forward.js +118 -0
  49. package/dist/commands/dev/forward.js.map +1 -0
  50. package/dist/commands/dev/index.js +66 -0
  51. package/dist/commands/dev/index.js.map +1 -0
  52. package/dist/commands/dev/list.js +96 -0
  53. package/dist/commands/dev/list.js.map +1 -0
  54. package/dist/commands/dev/screen-devtools.js +156 -0
  55. package/dist/commands/dev/screen-devtools.js.map +1 -0
  56. package/dist/commands/dev/select.js +118 -0
  57. package/dist/commands/dev/select.js.map +1 -0
  58. package/dist/commands/dev/shell.js +171 -0
  59. package/dist/commands/dev/shell.js.map +1 -0
  60. package/dist/commands/dev/vnc.js +75 -0
  61. package/dist/commands/dev/vnc.js.map +1 -0
  62. package/dist/commands/device/select.js +118 -0
  63. package/dist/commands/device/select.js.map +1 -0
  64. package/dist/commands/flash.js +1120 -0
  65. package/dist/commands/flash.js.map +1 -0
  66. package/dist/commands/inst/create.js +55 -0
  67. package/dist/commands/inst/create.js.map +1 -0
  68. package/dist/commands/inst/index.js +15 -0
  69. package/dist/commands/inst/index.js.map +1 -0
  70. package/dist/commands/inst/list.js +26 -0
  71. package/dist/commands/inst/list.js.map +1 -0
  72. package/dist/commands/legacydev/debug.js +11 -0
  73. package/dist/commands/legacydev/debug.js.map +1 -0
  74. package/dist/commands/legacydev/deploy.js +15 -0
  75. package/dist/commands/legacydev/deploy.js.map +1 -0
  76. package/dist/commands/legacydev/dumpTwin.js +27 -0
  77. package/dist/commands/legacydev/dumpTwin.js.map +1 -0
  78. package/dist/commands/legacydev/forward.js +104 -0
  79. package/dist/commands/legacydev/forward.js.map +1 -0
  80. package/dist/commands/legacydev/index.js +188 -0
  81. package/dist/commands/legacydev/index.js.map +1 -0
  82. package/dist/commands/legacydev/invoke.js +29 -0
  83. package/dist/commands/legacydev/invoke.js.map +1 -0
  84. package/dist/commands/legacydev/js.js +69 -0
  85. package/dist/commands/legacydev/js.js.map +1 -0
  86. package/dist/commands/legacydev/list.js +196 -0
  87. package/dist/commands/legacydev/list.js.map +1 -0
  88. package/dist/commands/legacydev/logs.js +60 -0
  89. package/dist/commands/legacydev/logs.js.map +1 -0
  90. package/dist/commands/legacydev/modules.js +50 -0
  91. package/dist/commands/legacydev/modules.js.map +1 -0
  92. package/dist/commands/legacydev/move.js +23 -0
  93. package/dist/commands/legacydev/move.js.map +1 -0
  94. package/dist/commands/legacydev/ota.js +88 -0
  95. package/dist/commands/legacydev/ota.js.map +1 -0
  96. package/dist/commands/legacydev/patchTwin.js +21 -0
  97. package/dist/commands/legacydev/patchTwin.js.map +1 -0
  98. package/dist/commands/legacydev/pin.js +23 -0
  99. package/dist/commands/legacydev/pin.js.map +1 -0
  100. package/dist/commands/legacydev/pub.js +25 -0
  101. package/dist/commands/legacydev/pub.js.map +1 -0
  102. package/dist/commands/legacydev/rdp.js +64 -0
  103. package/dist/commands/legacydev/rdp.js.map +1 -0
  104. package/dist/commands/legacydev/screen-devtools.js +142 -0
  105. package/dist/commands/legacydev/screen-devtools.js.map +1 -0
  106. package/dist/commands/legacydev/settingsShow.js +89 -0
  107. package/dist/commands/legacydev/settingsShow.js.map +1 -0
  108. package/dist/commands/legacydev/settingsUpdate.js +114 -0
  109. package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
  110. package/dist/commands/legacydev/shell.js +167 -0
  111. package/dist/commands/legacydev/shell.js.map +1 -0
  112. package/dist/commands/legacydev/showTwin.js +9 -0
  113. package/dist/commands/legacydev/showTwin.js.map +1 -0
  114. package/dist/commands/legacydev/statusLog.js +56 -0
  115. package/dist/commands/legacydev/statusLog.js.map +1 -0
  116. package/dist/commands/legacydev/sub.js +39 -0
  117. package/dist/commands/legacydev/sub.js.map +1 -0
  118. package/dist/commands/legacydev/vnc.js +61 -0
  119. package/dist/commands/legacydev/vnc.js.map +1 -0
  120. package/dist/commands/tenant/index.js +21 -0
  121. package/dist/commands/tenant/index.js.map +1 -0
  122. package/dist/commands/tenant/list.js +14 -0
  123. package/dist/commands/tenant/list.js.map +1 -0
  124. package/dist/commands/tenant/select.js +87 -0
  125. package/dist/commands/tenant/select.js.map +1 -0
  126. package/dist/commands/vm/create.js +718 -0
  127. package/dist/commands/vm/create.js.map +1 -0
  128. package/dist/commands/vm/index.js +130 -0
  129. package/dist/commands/vm/index.js.map +1 -0
  130. package/dist/commands/vm/list.js +124 -0
  131. package/dist/commands/vm/list.js.map +1 -0
  132. package/dist/commands/vm/logs.js +66 -0
  133. package/dist/commands/vm/logs.js.map +1 -0
  134. package/dist/commands/vm/remove.js +180 -0
  135. package/dist/commands/vm/remove.js.map +1 -0
  136. package/dist/commands/vm/shell.js +400 -0
  137. package/dist/commands/vm/shell.js.map +1 -0
  138. package/dist/commands/vm/start.js +861 -0
  139. package/dist/commands/vm/start.js.map +1 -0
  140. package/dist/commands/vm/stop.js +232 -0
  141. package/dist/commands/vm/stop.js.map +1 -0
  142. package/dist/index.js +158 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/services/admin-api/admin-api.types.js +3 -0
  145. package/dist/services/admin-api/admin-api.types.js.map +1 -0
  146. package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
  147. package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
  148. package/dist/services/admin-api/devices-admin-api.service.js +213 -0
  149. package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
  150. package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
  151. package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
  152. package/dist/services/admin-api/index.js +157 -0
  153. package/dist/services/admin-api/index.js.map +1 -0
  154. package/dist/services/admin-api/installations-admin-api.service.js +29 -0
  155. package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
  156. package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
  157. package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
  158. package/dist/services/auth/device-grant-auth.service.js +224 -0
  159. package/dist/services/auth/device-grant-auth.service.js.map +1 -0
  160. package/dist/services/phyhub/index.js +200 -0
  161. package/dist/services/phyhub/index.js.map +1 -0
  162. package/dist/services/phyhub/phyhub.types.js +3 -0
  163. package/dist/services/phyhub/phyhub.types.js.map +1 -0
  164. package/dist/utils/device-fetcher.js +92 -0
  165. package/dist/utils/device-fetcher.js.map +1 -0
  166. package/dist/utils/devices.js +41 -0
  167. package/dist/utils/devices.js.map +1 -0
  168. package/dist/utils/docker-credentials.js +720 -0
  169. package/dist/utils/docker-credentials.js.map +1 -0
  170. package/dist/utils/emulated-device.js +91 -0
  171. package/dist/utils/emulated-device.js.map +1 -0
  172. package/dist/utils/index.js +180 -0
  173. package/dist/utils/index.js.map +1 -0
  174. package/dist/utils/modules.js +36 -0
  175. package/dist/utils/modules.js.map +1 -0
  176. package/dist/utils/org-selector.js +108 -0
  177. package/dist/utils/org-selector.js.map +1 -0
  178. package/dist/utils/proxy.js +31 -0
  179. package/dist/utils/proxy.js.map +1 -0
  180. package/dist/utils/registry-credentials.js +113 -0
  181. package/dist/utils/registry-credentials.js.map +1 -0
  182. package/dist/utils/statuses.js +124 -0
  183. package/dist/utils/statuses.js.map +1 -0
  184. package/dist/utils/templates.js +197 -0
  185. package/dist/utils/templates.js.map +1 -0
  186. package/dist/utils/tenant-storage.js +88 -0
  187. package/dist/utils/tenant-storage.js.map +1 -0
  188. package/dist/utils/vm.js +434 -0
  189. package/dist/utils/vm.js.map +1 -0
  190. package/dist/utils/with-spinner.js +20 -0
  191. package/dist/utils/with-spinner.js.map +1 -0
  192. package/package.json +103 -0
@@ -0,0 +1,434 @@
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.getVmsBaseDir = getVmsBaseDir;
7
+ exports.getVmsCacheDir = getVmsCacheDir;
8
+ exports.getVmDir = getVmDir;
9
+ exports.getVmConfigPath = getVmConfigPath;
10
+ exports.getVmSettingsPath = getVmSettingsPath;
11
+ exports.getVmLogPath = getVmLogPath;
12
+ exports.getVmPidPath = getVmPidPath;
13
+ exports.getVmSerialPath = getVmSerialPath;
14
+ exports.getPhyOsCachePath = getPhyOsCachePath;
15
+ exports.ensureVmDir = ensureVmDir;
16
+ exports.vmExists = vmExists;
17
+ exports.isVmRunning = isVmRunning;
18
+ exports.readVmConfig = readVmConfig;
19
+ exports.readVmSettings = readVmSettings;
20
+ exports.listVms = listVms;
21
+ exports.getVmPid = getVmPid;
22
+ exports.isPidFileRootOwned = isPidFileRootOwned;
23
+ exports.relaunchWithSudo = relaunchWithSudo;
24
+ exports.runBrewCommandAsUser = runBrewCommandAsUser;
25
+ exports.execPromise = execPromise;
26
+ exports.createPidFileForRunningVm = createPidFileForRunningVm;
27
+ const fs_1 = __importDefault(require("fs"));
28
+ const path_1 = __importDefault(require("path"));
29
+ const os_1 = __importDefault(require("os"));
30
+ const chalk_1 = __importDefault(require("chalk"));
31
+ const child_process_1 = require("child_process");
32
+ /**
33
+ * Get the base directory for VM storage
34
+ */
35
+ function getVmsBaseDir() {
36
+ return path_1.default.join(os_1.default.homedir(), '.config', 'phygrid-cli', 'vms');
37
+ }
38
+ /**
39
+ * Get the cache directory for VM downloads
40
+ */
41
+ function getVmsCacheDir() {
42
+ return path_1.default.join(os_1.default.homedir(), '.config', 'phygrid-cli', 'cache');
43
+ }
44
+ /**
45
+ * Get the directory for a specific VM
46
+ */
47
+ function getVmDir(vmName) {
48
+ return path_1.default.join(getVmsBaseDir(), vmName);
49
+ }
50
+ /**
51
+ * Get the path to a VM's configuration file
52
+ */
53
+ function getVmConfigPath(vmName) {
54
+ return path_1.default.join(getVmDir(vmName), 'config.json');
55
+ }
56
+ /**
57
+ * Get the path to a VM's settings file
58
+ */
59
+ function getVmSettingsPath(vmName) {
60
+ return path_1.default.join(getVmDir(vmName), 'settings.json');
61
+ }
62
+ /**
63
+ * Get the path to a VM's log file
64
+ */
65
+ function getVmLogPath(vmName) {
66
+ return path_1.default.join(getVmDir(vmName), 'vm.log');
67
+ }
68
+ /**
69
+ * Get the path to a VM's pid file
70
+ */
71
+ function getVmPidPath(vmName) {
72
+ return path_1.default.join(getVmDir(vmName), 'vm.pid');
73
+ }
74
+ /**
75
+ * Get the path to a VM's serial file
76
+ */
77
+ function getVmSerialPath(vmName) {
78
+ return path_1.default.join(getVmDir(vmName), 'serial.txt');
79
+ }
80
+ /**
81
+ * Get the cache path for a PhyOS image based on version and architecture
82
+ */
83
+ function getPhyOsCachePath(version, arch, fileType, extension) {
84
+ const cacheDir = getVmsCacheDir();
85
+ let filename;
86
+ let fileExt = extension;
87
+ switch (fileType) {
88
+ case 'tar':
89
+ filename = `phyos.${version}.qemu${arch}.tar.gz`;
90
+ break;
91
+ case 'image':
92
+ filename = `phyos.${version}.qemu${arch}.Image`;
93
+ break;
94
+ case 'initramfs':
95
+ filename = `phyos.${version}.qemu${arch}.cpio.gz`;
96
+ break;
97
+ case 'disk':
98
+ default:
99
+ fileExt = fileExt || 'zfs';
100
+ filename = `phyos.${version}.qemu${arch}.${fileExt}`;
101
+ break;
102
+ }
103
+ return path_1.default.join(cacheDir, filename);
104
+ }
105
+ /**
106
+ * Ensure the VM base directory exists
107
+ */
108
+ function ensureVmDir() {
109
+ const baseDir = getVmsBaseDir();
110
+ if (!fs_1.default.existsSync(baseDir)) {
111
+ fs_1.default.mkdirSync(baseDir, { recursive: true });
112
+ }
113
+ // Also ensure cache directory exists
114
+ const cacheDir = getVmsCacheDir();
115
+ if (!fs_1.default.existsSync(cacheDir)) {
116
+ fs_1.default.mkdirSync(cacheDir, { recursive: true });
117
+ }
118
+ }
119
+ /**
120
+ * Check if a VM exists
121
+ */
122
+ function vmExists(vmName) {
123
+ return fs_1.default.existsSync(getVmConfigPath(vmName));
124
+ }
125
+ /**
126
+ * Check if a VM is running
127
+ */
128
+ function isVmRunning(vmName) {
129
+ const pidPath = getVmPidPath(vmName);
130
+ if (!fs_1.default.existsSync(pidPath)) {
131
+ return false;
132
+ }
133
+ try {
134
+ const pidContent = fs_1.default.readFileSync(pidPath, 'utf8').trim();
135
+ // Check if PID file is empty or contains invalid data
136
+ if (!pidContent || isNaN(parseInt(pidContent, 10))) {
137
+ // Remove corrupted PID file
138
+ try {
139
+ fs_1.default.unlinkSync(pidPath);
140
+ }
141
+ catch (e) {
142
+ // Ignore cleanup errors
143
+ }
144
+ return false;
145
+ }
146
+ const pid = parseInt(pidContent, 10);
147
+ // On Unix-like systems, sending signal 0 checks process existence
148
+ process.kill(pid, 0);
149
+ return true;
150
+ }
151
+ catch (error) {
152
+ // If process.kill throws an error, the process doesn't exist
153
+ // Clean up stale PID file
154
+ try {
155
+ if (fs_1.default.existsSync(pidPath)) {
156
+ fs_1.default.unlinkSync(pidPath);
157
+ }
158
+ }
159
+ catch (e) {
160
+ // Ignore cleanup errors
161
+ }
162
+ return false;
163
+ }
164
+ }
165
+ /**
166
+ * Read a VM's configuration
167
+ */
168
+ function readVmConfig(vmName) {
169
+ const configPath = getVmConfigPath(vmName);
170
+ if (!fs_1.default.existsSync(configPath)) {
171
+ throw new Error(`VM "${vmName}" not found`);
172
+ }
173
+ return JSON.parse(fs_1.default.readFileSync(configPath, 'utf8'));
174
+ }
175
+ /**
176
+ * Read VM settings from settings.json, defaulting to values in config.json if not present
177
+ */
178
+ function readVmSettings(name) {
179
+ try {
180
+ const settingsPath = getVmSettingsPath(name);
181
+ if (fs_1.default.existsSync(settingsPath)) {
182
+ const settings = JSON.parse(fs_1.default.readFileSync(settingsPath, 'utf8'));
183
+ return settings;
184
+ }
185
+ // If settings.json doesn't exist, try to read from config.json and serial.txt
186
+ const configPath = getVmConfigPath(name);
187
+ const serialPath = getVmSerialPath(name);
188
+ let config = {
189
+ memory: 2048,
190
+ arch: null,
191
+ version: null,
192
+ created: null
193
+ };
194
+ let serial = '';
195
+ if (fs_1.default.existsSync(configPath)) {
196
+ const configData = JSON.parse(fs_1.default.readFileSync(configPath, 'utf8'));
197
+ config = {
198
+ memory: configData.memory || 2048,
199
+ arch: configData.arch || null,
200
+ version: configData.version || null,
201
+ created: configData.created || null
202
+ };
203
+ }
204
+ if (fs_1.default.existsSync(serialPath)) {
205
+ serial = fs_1.default.readFileSync(serialPath, 'utf8').trim();
206
+ }
207
+ // Return default settings
208
+ return {
209
+ memory: config.memory,
210
+ serial,
211
+ arch: config.arch,
212
+ version: config.version,
213
+ created: config.created,
214
+ headless: false
215
+ };
216
+ }
217
+ catch (error) {
218
+ console.error(`Error reading VM settings: ${error.message}`);
219
+ // Return default settings
220
+ return {
221
+ memory: 2048,
222
+ serial: '',
223
+ arch: null,
224
+ version: null,
225
+ created: null,
226
+ headless: false
227
+ };
228
+ }
229
+ }
230
+ /**
231
+ * List all VMs
232
+ */
233
+ function listVms() {
234
+ const baseDir = getVmsBaseDir();
235
+ if (!fs_1.default.existsSync(baseDir)) {
236
+ return [];
237
+ }
238
+ return fs_1.default.readdirSync(baseDir)
239
+ .filter(item => {
240
+ const vmDir = path_1.default.join(baseDir, item);
241
+ const configPath = path_1.default.join(vmDir, 'config.json');
242
+ return fs_1.default.statSync(vmDir).isDirectory() && fs_1.default.existsSync(configPath);
243
+ });
244
+ }
245
+ /**
246
+ * Get the PID of a running VM
247
+ */
248
+ function getVmPid(vmName) {
249
+ const pidPath = getVmPidPath(vmName);
250
+ if (!fs_1.default.existsSync(pidPath)) {
251
+ return null;
252
+ }
253
+ try {
254
+ const pidContent = fs_1.default.readFileSync(pidPath, 'utf8').trim();
255
+ // Check if PID file is empty or contains invalid data
256
+ if (!pidContent || isNaN(parseInt(pidContent, 10))) {
257
+ // Remove corrupted PID file
258
+ try {
259
+ fs_1.default.unlinkSync(pidPath);
260
+ }
261
+ catch (e) {
262
+ // Ignore cleanup errors
263
+ }
264
+ return null;
265
+ }
266
+ const pid = parseInt(pidContent, 10);
267
+ // Verify process exists
268
+ process.kill(pid, 0);
269
+ return pid;
270
+ }
271
+ catch (error) {
272
+ // If error, process doesn't exist
273
+ // Clean up stale PID file
274
+ try {
275
+ if (fs_1.default.existsSync(pidPath)) {
276
+ fs_1.default.unlinkSync(pidPath);
277
+ }
278
+ }
279
+ catch (e) {
280
+ // Ignore cleanup errors
281
+ }
282
+ return null;
283
+ }
284
+ }
285
+ /**
286
+ * Checks if the PID file for a VM exists and is owned by root.
287
+ * Also returns true if the file exists but the current user lacks permission to stat it.
288
+ */
289
+ function isPidFileRootOwned(name) {
290
+ const pidPath = getVmPidPath(name);
291
+ try {
292
+ // Check existence first to avoid error for non-existent file
293
+ if (fs_1.default.existsSync(pidPath)) {
294
+ // Attempt to get file stats
295
+ const stats = fs_1.default.statSync(pidPath);
296
+ return stats.uid === 0; // Check if UID is root (0)
297
+ }
298
+ }
299
+ catch (error) {
300
+ // If statSync fails with a permission error, assume it's root-owned
301
+ // because the current user lacks permissions.
302
+ if (error.code === 'EACCES' || error.code === 'EPERM') {
303
+ // console.warn(`Permission error accessing PID file ${pidPath}, assuming root-owned.`);
304
+ return true;
305
+ }
306
+ // Log other unexpected errors during stat
307
+ console.warn(`Warning: Error checking PID file ${pidPath}: ${error.message}`);
308
+ }
309
+ // Return false if file doesn't exist or other non-permission error occurred
310
+ return false;
311
+ }
312
+ /**
313
+ * Relaunches the current phy command with sudo.
314
+ * This function assumes the check for needing sudo has already been made.
315
+ * It will exit the current process.
316
+ *
317
+ * @param commandArgs The original arguments passed to the phy command (e.g., process.argv.slice(2))
318
+ */
319
+ function relaunchWithSudo(commandArgs) {
320
+ const phyCommand = process.argv[1]; // Path to the phy script being executed
321
+ const sudoArgs = [phyCommand, ...commandArgs];
322
+ console.log(chalk_1.default.yellow(`Relaunching with sudo: sudo phy ${commandArgs.join(' ')}`));
323
+ try {
324
+ const sudoProcess = (0, child_process_1.spawn)('sudo', sudoArgs, { stdio: 'inherit' });
325
+ sudoProcess.on('error', (err) => {
326
+ console.error(chalk_1.default.red(`Failed to execute sudo: ${err.message}`));
327
+ console.error(chalk_1.default.red('Please ensure \'sudo\' is available and try running the command manually.'));
328
+ process.exit(1); // Exit on sudo error
329
+ });
330
+ // Wait for the sudo process to exit and exit this script with the same code
331
+ sudoProcess.on('close', (code) => {
332
+ process.exit(code === null ? 1 : code); // Exit when sudo process finishes
333
+ });
334
+ // Keep the current process alive briefly to allow sudo process to start
335
+ // and handle prompt / errors. Exiting immediately can cause issues.
336
+ // The 'close' and 'error' handlers above will ultimately exit this process.
337
+ setTimeout(() => {
338
+ // If the process is still running after 15s (e.g., sudo hung), exit.
339
+ console.warn('Timeout waiting for sudo process, exiting original process.');
340
+ process.exit(1);
341
+ }, 15000); // 15 second timeout
342
+ }
343
+ catch (error) {
344
+ console.error(chalk_1.default.red(`Error attempting to spawn sudo: ${error.message}`));
345
+ process.exit(1); // Exit on spawn error
346
+ }
347
+ }
348
+ /**
349
+ * Executes a brew command, ensuring it runs as the original user if sudo was used.
350
+ * Uses execSync for simplicity, throws error on failure.
351
+ */
352
+ function runBrewCommandAsUser(args) {
353
+ const sudoUser = process.env.SUDO_USER;
354
+ const isRoot = process.getuid && process.getuid() === 0;
355
+ let cmd = 'brew';
356
+ let finalArgs = args;
357
+ if (isRoot && sudoUser) {
358
+ // If running as root via sudo, switch back to the original user for brew
359
+ cmd = 'sudo';
360
+ finalArgs = ['-u', sudoUser, 'brew', ...args];
361
+ console.log(chalk_1.default.gray(`Running brew as original user: sudo -u ${sudoUser} brew ${args.join(' ')}`));
362
+ }
363
+ else {
364
+ // Running as normal user or sudo without SUDO_USER (unlikely but handled)
365
+ console.log(chalk_1.default.gray(`Running brew: brew ${args.join(' ')}`));
366
+ }
367
+ try {
368
+ // Execute synchronously and return output
369
+ return (0, child_process_1.execSync)(`${cmd} ${finalArgs.join(' ')}`, { stdio: 'pipe' }).toString();
370
+ }
371
+ catch (error) {
372
+ // Throw a more specific error
373
+ const stderr = error.stderr ? error.stderr.toString() : '(no stderr)';
374
+ throw new Error(`Failed to run brew command: [${cmd} ${finalArgs.join(' ')}]. Error: ${error.message}. Stderr: ${stderr.trim()}`);
375
+ }
376
+ }
377
+ /**
378
+ * Promise-based wrapper for exec (keep for non-brew commands)
379
+ */
380
+ function execPromise(command) {
381
+ return new Promise((resolve, reject) => {
382
+ // Import exec here locally if not already imported at top level
383
+ // Or ensure 'exec' is imported from 'child_process' at the top
384
+ const cp = require('child_process');
385
+ cp.exec(command, (error, stdout, stderr) => {
386
+ if (error) {
387
+ // Log stderr for context if available
388
+ if (stderr) {
389
+ // console.error(`Command failed: ${command}\nstderr: ${stderr.trim()}`);
390
+ }
391
+ reject(error);
392
+ return;
393
+ }
394
+ resolve(stdout.trim());
395
+ });
396
+ });
397
+ }
398
+ /**
399
+ * Check if QEMU is installed and available, prioritizing phygrid/qemu-virgl on macOS aarch64
400
+ */
401
+ /**
402
+ * Manually create a PID file for a running VM by finding its process
403
+ * This is used when PID file creation fails but the VM is actually running
404
+ */
405
+ function createPidFileForRunningVm(vmName) {
406
+ try {
407
+ const config = readVmConfig(vmName);
408
+ const qemuBin = config.arch === 'amd64' ? 'qemu-system-x86_64' : 'qemu-system-aarch64';
409
+ // Use ps to find the QEMU process for this VM
410
+ const psOutput = (0, child_process_1.execSync)(`ps aux | grep "${qemuBin}" | grep "${vmName}" | grep -v grep`, { encoding: 'utf8' });
411
+ if (psOutput.trim()) {
412
+ // Extract PID from ps output (second column)
413
+ const lines = psOutput.trim().split('\n');
414
+ for (const line of lines) {
415
+ const parts = line.trim().split(/\s+/);
416
+ if (parts.length >= 2) {
417
+ const pid = parseInt(parts[1], 10);
418
+ if (!isNaN(pid)) {
419
+ // Create the PID file
420
+ const pidPath = getVmPidPath(vmName);
421
+ fs_1.default.writeFileSync(pidPath, String(pid));
422
+ return true;
423
+ }
424
+ }
425
+ }
426
+ }
427
+ return false;
428
+ }
429
+ catch (error) {
430
+ // If we can't find the process or create the PID file, return false
431
+ return false;
432
+ }
433
+ }
434
+ //# sourceMappingURL=vm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm.js","sourceRoot":"","sources":["../../src/utils/vm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const clui_1 = require("clui");
4
+ async function withSpinner(action, message = '') {
5
+ if (!process.stdout.isTTY)
6
+ return action();
7
+ const spinner = new clui_1.Spinner(message);
8
+ try {
9
+ spinner.start();
10
+ const res = await action();
11
+ spinner.stop();
12
+ return res;
13
+ }
14
+ catch (e) {
15
+ spinner.stop();
16
+ throw e;
17
+ }
18
+ }
19
+ exports.default = withSpinner;
20
+ //# sourceMappingURL=with-spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-spinner.js","sourceRoot":"","sources":["../../src/utils/with-spinner.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAE/B,KAAK,UAAU,WAAW,CAAW,MAAwB,EAAE,OAAO,GAAG,EAAE;IACzE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,MAAM,EAAE,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,cAAO,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,kBAAe,WAAW,CAAC"}
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@phystack/cli",
3
+ "version": "4.3.40-dev",
4
+ "description": "Phygrid CLI.",
5
+ "main": "index.js",
6
+ "homepage": "./",
7
+ "license": "MIT",
8
+ "compilerOptions": {
9
+ "module": "ESNext",
10
+ "moduleResolution": "node"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "engines": {
16
+ "node": ">=20.0.0"
17
+ },
18
+ "scripts": {
19
+ "prepare-tmp": "npm run build",
20
+ "build": "tsc",
21
+ "start": "node dist/src/index.js",
22
+ "lint-tmp": "tsc --noEmit && eslint --ext .ts ./src --ignore-pattern '**/src/templates/react/template/node_modules/*' .",
23
+ "lint-fix-tmp": "yarn lint-tmp --fix",
24
+ "lint": "tsc --noEmit && eslint --ext .ts ./src --ignore-pattern '**/src/templates/react/template/node_modules/*' .",
25
+ "lint:fix": "yarn lint --fix",
26
+ "dev-tmp": "node -r ts-node/register src/index.ts",
27
+ "dev-watch-tmp": "yarn && yarn build-watch-tmp && yarn link",
28
+ "version-tmp": "npm run lint-fix && git add -A src",
29
+ "postversion-tmp": "git push && git push --tags",
30
+ "format-tmp": "yarn lint-fix-tmp"
31
+ },
32
+ "bin": {
33
+ "phy": "./bin/index.js"
34
+ },
35
+ "files": [
36
+ "bin/**/*",
37
+ "dist/**/*"
38
+ ],
39
+ "author": "Kamil Placzek <kamil.placzek@ombori.com>",
40
+ "devDependencies": {
41
+ "@types/ajv": "^1.0.0",
42
+ "@types/clui": "^0.3.0",
43
+ "@types/cross-spawn": "^6.0.2",
44
+ "@types/fs-extra": "^8.0.1",
45
+ "@types/inquirer": "^6.5.0",
46
+ "@types/node": "^13.1.1",
47
+ "@types/tar": "^4.0.3",
48
+ "@typescript-eslint/eslint-plugin": "^2.13.0",
49
+ "@typescript-eslint/parser": "^2.13.0",
50
+ "bufferutil": "^4.0.6",
51
+ "copyfiles": "^2.1.1",
52
+ "eslint": "^6.8.0",
53
+ "eslint-config-airbnb-base": "^14.0.0",
54
+ "eslint-config-prettier": "^6.9.0",
55
+ "eslint-plugin-import": "^2.19.1",
56
+ "eslint-plugin-prettier": "^3.1.2",
57
+ "prettier": "^1.19.1",
58
+ "ts-loader": "^9.3.1",
59
+ "ts-node": "^8.5.4",
60
+ "utf-8-validate": "^5.0.9"
61
+ },
62
+ "dependencies": {
63
+ "@types/cheerio": "^0.22.35",
64
+ "@types/mkdirp": "^1.0.0",
65
+ "ajv": "^6.10.2",
66
+ "axios": "^1.7.9",
67
+ "axios-auth-refresh": "^3.3.6",
68
+ "azure-storage": "^2.10.3",
69
+ "boxen": "^4.2.0",
70
+ "chalk": "^3.0.0",
71
+ "cheerio": "^1.0.0-rc.12",
72
+ "cli-table3": "^0.6.3",
73
+ "clui": "^0.3.6",
74
+ "commander": "^5.0.0",
75
+ "cross-spawn": "^7.0.3",
76
+ "dotenv": "^8.2.0",
77
+ "fs-extra": "^8.1.0",
78
+ "fuzzy": "^0.1.3",
79
+ "http-proxy-agent": "^7.0.2",
80
+ "https-proxy-agent": "^7.0.6",
81
+ "inquirer": "^8.0.0",
82
+ "inquirer-autocomplete-prompt": "^2.0.0",
83
+ "isomorphic-fetch": "^2.2.1",
84
+ "lodash": "^4.17.15",
85
+ "md5": "^2.2.1",
86
+ "mkdirp": "^1.0.4",
87
+ "moment": "^2.29.1",
88
+ "node-fetch": "^3.3.2",
89
+ "open": "7.4.2",
90
+ "openid-client": "^5.6.5",
91
+ "rimraf": "^6.0.1",
92
+ "tar": "^5.0.5",
93
+ "typescript": "^5.4.5",
94
+ "uuid": "^11.0.5",
95
+ "websocket-stream": "^5.5.2",
96
+ "ws": "^7.4.5"
97
+ },
98
+ "resolutions": {
99
+ "string-width": "^4.2.3",
100
+ "strip-ansi": "^6.0.1"
101
+ },
102
+ "gitHead": "53c505b3ecad47ebd4f38819c07b0ec1227214a6"
103
+ }