@phystack/cli 5.0.3 → 5.1.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.
Files changed (218) hide show
  1. package/bin/index.js +27 -1
  2. package/package.json +12 -65
  3. package/dist/commands/app/build-apps.js +0 -66
  4. package/dist/commands/app/build-apps.js.map +0 -1
  5. package/dist/commands/app/build-container-remote.js +0 -171
  6. package/dist/commands/app/build-container-remote.js.map +0 -1
  7. package/dist/commands/app/build-container.js +0 -330
  8. package/dist/commands/app/build-container.js.map +0 -1
  9. package/dist/commands/app/build.js +0 -398
  10. package/dist/commands/app/build.js.map +0 -1
  11. package/dist/commands/app/create.js +0 -463
  12. package/dist/commands/app/create.js.map +0 -1
  13. package/dist/commands/app/deploy.js +0 -176
  14. package/dist/commands/app/deploy.js.map +0 -1
  15. package/dist/commands/app/device-picker.js +0 -150
  16. package/dist/commands/app/device-picker.js.map +0 -1
  17. package/dist/commands/app/import.js +0 -336
  18. package/dist/commands/app/import.js.map +0 -1
  19. package/dist/commands/app/list.js +0 -26
  20. package/dist/commands/app/list.js.map +0 -1
  21. package/dist/commands/app/publish.js +0 -332
  22. package/dist/commands/app/publish.js.map +0 -1
  23. package/dist/commands/app/settings.js +0 -133
  24. package/dist/commands/app/settings.js.map +0 -1
  25. package/dist/commands/app/types.js +0 -14
  26. package/dist/commands/app/types.js.map +0 -1
  27. package/dist/commands/app/upload-description.js +0 -139
  28. package/dist/commands/app/upload-description.js.map +0 -1
  29. package/dist/commands/app/upload-settings.js +0 -29
  30. package/dist/commands/app/upload-settings.js.map +0 -1
  31. package/dist/commands/app/utils.js +0 -86
  32. package/dist/commands/app/utils.js.map +0 -1
  33. package/dist/commands/auth/login.js +0 -145
  34. package/dist/commands/auth/login.js.map +0 -1
  35. package/dist/commands/auth/logout.js +0 -19
  36. package/dist/commands/auth/logout.js.map +0 -1
  37. package/dist/commands/descriptor/create.js +0 -143
  38. package/dist/commands/descriptor/create.js.map +0 -1
  39. package/dist/commands/descriptor/index.js +0 -36
  40. package/dist/commands/descriptor/index.js.map +0 -1
  41. package/dist/commands/descriptor/publish.js +0 -163
  42. package/dist/commands/descriptor/publish.js.map +0 -1
  43. package/dist/commands/descriptor/show.js +0 -68
  44. package/dist/commands/descriptor/show.js.map +0 -1
  45. package/dist/commands/dev/cp.js +0 -764
  46. package/dist/commands/dev/cp.js.map +0 -1
  47. package/dist/commands/dev/develop.js +0 -175
  48. package/dist/commands/dev/develop.js.map +0 -1
  49. package/dist/commands/dev/forward.js +0 -132
  50. package/dist/commands/dev/forward.js.map +0 -1
  51. package/dist/commands/dev/index.js +0 -80
  52. package/dist/commands/dev/index.js.map +0 -1
  53. package/dist/commands/dev/list.js +0 -96
  54. package/dist/commands/dev/list.js.map +0 -1
  55. package/dist/commands/dev/screen-devtools.js +0 -156
  56. package/dist/commands/dev/screen-devtools.js.map +0 -1
  57. package/dist/commands/dev/select.js +0 -118
  58. package/dist/commands/dev/select.js.map +0 -1
  59. package/dist/commands/dev/shell.js +0 -186
  60. package/dist/commands/dev/shell.js.map +0 -1
  61. package/dist/commands/dev/vnc.js +0 -75
  62. package/dist/commands/dev/vnc.js.map +0 -1
  63. package/dist/commands/device/select.js +0 -118
  64. package/dist/commands/device/select.js.map +0 -1
  65. package/dist/commands/flash.js +0 -1120
  66. package/dist/commands/flash.js.map +0 -1
  67. package/dist/commands/inst/create.js +0 -55
  68. package/dist/commands/inst/create.js.map +0 -1
  69. package/dist/commands/inst/index.js +0 -15
  70. package/dist/commands/inst/index.js.map +0 -1
  71. package/dist/commands/inst/list.js +0 -26
  72. package/dist/commands/inst/list.js.map +0 -1
  73. package/dist/commands/legacydev/debug.js +0 -11
  74. package/dist/commands/legacydev/debug.js.map +0 -1
  75. package/dist/commands/legacydev/deploy.js +0 -15
  76. package/dist/commands/legacydev/deploy.js.map +0 -1
  77. package/dist/commands/legacydev/dumpTwin.js +0 -27
  78. package/dist/commands/legacydev/dumpTwin.js.map +0 -1
  79. package/dist/commands/legacydev/forward.js +0 -104
  80. package/dist/commands/legacydev/forward.js.map +0 -1
  81. package/dist/commands/legacydev/index.js +0 -188
  82. package/dist/commands/legacydev/index.js.map +0 -1
  83. package/dist/commands/legacydev/invoke.js +0 -29
  84. package/dist/commands/legacydev/invoke.js.map +0 -1
  85. package/dist/commands/legacydev/js.js +0 -69
  86. package/dist/commands/legacydev/js.js.map +0 -1
  87. package/dist/commands/legacydev/list.js +0 -196
  88. package/dist/commands/legacydev/list.js.map +0 -1
  89. package/dist/commands/legacydev/logs.js +0 -60
  90. package/dist/commands/legacydev/logs.js.map +0 -1
  91. package/dist/commands/legacydev/modules.js +0 -50
  92. package/dist/commands/legacydev/modules.js.map +0 -1
  93. package/dist/commands/legacydev/move.js +0 -23
  94. package/dist/commands/legacydev/move.js.map +0 -1
  95. package/dist/commands/legacydev/ota.js +0 -88
  96. package/dist/commands/legacydev/ota.js.map +0 -1
  97. package/dist/commands/legacydev/patchTwin.js +0 -21
  98. package/dist/commands/legacydev/patchTwin.js.map +0 -1
  99. package/dist/commands/legacydev/pin.js +0 -23
  100. package/dist/commands/legacydev/pin.js.map +0 -1
  101. package/dist/commands/legacydev/pub.js +0 -25
  102. package/dist/commands/legacydev/pub.js.map +0 -1
  103. package/dist/commands/legacydev/rdp.js +0 -64
  104. package/dist/commands/legacydev/rdp.js.map +0 -1
  105. package/dist/commands/legacydev/screen-devtools.js +0 -142
  106. package/dist/commands/legacydev/screen-devtools.js.map +0 -1
  107. package/dist/commands/legacydev/settingsShow.js +0 -89
  108. package/dist/commands/legacydev/settingsShow.js.map +0 -1
  109. package/dist/commands/legacydev/settingsUpdate.js +0 -114
  110. package/dist/commands/legacydev/settingsUpdate.js.map +0 -1
  111. package/dist/commands/legacydev/shell.js +0 -167
  112. package/dist/commands/legacydev/shell.js.map +0 -1
  113. package/dist/commands/legacydev/showTwin.js +0 -9
  114. package/dist/commands/legacydev/showTwin.js.map +0 -1
  115. package/dist/commands/legacydev/statusLog.js +0 -56
  116. package/dist/commands/legacydev/statusLog.js.map +0 -1
  117. package/dist/commands/legacydev/sub.js +0 -39
  118. package/dist/commands/legacydev/sub.js.map +0 -1
  119. package/dist/commands/legacydev/vnc.js +0 -61
  120. package/dist/commands/legacydev/vnc.js.map +0 -1
  121. package/dist/commands/simulator/index.js +0 -37
  122. package/dist/commands/simulator/index.js.map +0 -1
  123. package/dist/commands/simulator/list.js +0 -20
  124. package/dist/commands/simulator/list.js.map +0 -1
  125. package/dist/commands/simulator/remove.js +0 -19
  126. package/dist/commands/simulator/remove.js.map +0 -1
  127. package/dist/commands/simulator/run.js +0 -380
  128. package/dist/commands/simulator/run.js.map +0 -1
  129. package/dist/commands/simulator/start.js +0 -186
  130. package/dist/commands/simulator/start.js.map +0 -1
  131. package/dist/commands/tenant/index.js +0 -21
  132. package/dist/commands/tenant/index.js.map +0 -1
  133. package/dist/commands/tenant/list.js +0 -14
  134. package/dist/commands/tenant/list.js.map +0 -1
  135. package/dist/commands/tenant/select.js +0 -87
  136. package/dist/commands/tenant/select.js.map +0 -1
  137. package/dist/commands/vm/create.js +0 -959
  138. package/dist/commands/vm/create.js.map +0 -1
  139. package/dist/commands/vm/index.js +0 -130
  140. package/dist/commands/vm/index.js.map +0 -1
  141. package/dist/commands/vm/list.js +0 -124
  142. package/dist/commands/vm/list.js.map +0 -1
  143. package/dist/commands/vm/logs.js +0 -66
  144. package/dist/commands/vm/logs.js.map +0 -1
  145. package/dist/commands/vm/remove.js +0 -180
  146. package/dist/commands/vm/remove.js.map +0 -1
  147. package/dist/commands/vm/shell.js +0 -400
  148. package/dist/commands/vm/shell.js.map +0 -1
  149. package/dist/commands/vm/start.js +0 -861
  150. package/dist/commands/vm/start.js.map +0 -1
  151. package/dist/commands/vm/stop.js +0 -232
  152. package/dist/commands/vm/stop.js.map +0 -1
  153. package/dist/index.js +0 -169
  154. package/dist/index.js.map +0 -1
  155. package/dist/services/admin-api/admin-api.types.js +0 -3
  156. package/dist/services/admin-api/admin-api.types.js.map +0 -1
  157. package/dist/services/admin-api/device-modules.admin-api.service.js +0 -58
  158. package/dist/services/admin-api/device-modules.admin-api.service.js.map +0 -1
  159. package/dist/services/admin-api/devices-admin-api.service.js +0 -213
  160. package/dist/services/admin-api/devices-admin-api.service.js.map +0 -1
  161. package/dist/services/admin-api/gridapps-admin-api.service.js +0 -59
  162. package/dist/services/admin-api/gridapps-admin-api.service.js.map +0 -1
  163. package/dist/services/admin-api/index.js +0 -151
  164. package/dist/services/admin-api/index.js.map +0 -1
  165. package/dist/services/admin-api/installations-admin-api.service.js +0 -29
  166. package/dist/services/admin-api/installations-admin-api.service.js.map +0 -1
  167. package/dist/services/admin-api/organizations-admin-api.service.js +0 -53
  168. package/dist/services/admin-api/organizations-admin-api.service.js.map +0 -1
  169. package/dist/services/auth/device-grant-auth.service.js +0 -226
  170. package/dist/services/auth/device-grant-auth.service.js.map +0 -1
  171. package/dist/services/env.js +0 -21
  172. package/dist/services/env.js.map +0 -1
  173. package/dist/services/phyhub/index.js +0 -200
  174. package/dist/services/phyhub/index.js.map +0 -1
  175. package/dist/services/phyhub/phyhub.types.js +0 -3
  176. package/dist/services/phyhub/phyhub.types.js.map +0 -1
  177. package/dist/simulator/index.js +0 -162
  178. package/dist/simulator/index.js.map +0 -1
  179. package/dist/simulator/local-server.js +0 -147
  180. package/dist/simulator/local-server.js.map +0 -1
  181. package/dist/simulator/logger.js +0 -43
  182. package/dist/simulator/logger.js.map +0 -1
  183. package/dist/simulator/message-router.js +0 -379
  184. package/dist/simulator/message-router.js.map +0 -1
  185. package/dist/simulator/twin-cache.js +0 -58
  186. package/dist/simulator/twin-cache.js.map +0 -1
  187. package/dist/simulator/types.js +0 -16
  188. package/dist/simulator/types.js.map +0 -1
  189. package/dist/utils/device-fetcher.js +0 -92
  190. package/dist/utils/device-fetcher.js.map +0 -1
  191. package/dist/utils/devices.js +0 -41
  192. package/dist/utils/devices.js.map +0 -1
  193. package/dist/utils/docker-credentials.js +0 -720
  194. package/dist/utils/docker-credentials.js.map +0 -1
  195. package/dist/utils/emulated-device.js +0 -91
  196. package/dist/utils/emulated-device.js.map +0 -1
  197. package/dist/utils/index.js +0 -147
  198. package/dist/utils/index.js.map +0 -1
  199. package/dist/utils/modules.js +0 -36
  200. package/dist/utils/modules.js.map +0 -1
  201. package/dist/utils/org-selector.js +0 -108
  202. package/dist/utils/org-selector.js.map +0 -1
  203. package/dist/utils/proxy.js +0 -31
  204. package/dist/utils/proxy.js.map +0 -1
  205. package/dist/utils/registry-credentials.js +0 -113
  206. package/dist/utils/registry-credentials.js.map +0 -1
  207. package/dist/utils/simulator-config.js +0 -142
  208. package/dist/utils/simulator-config.js.map +0 -1
  209. package/dist/utils/statuses.js +0 -124
  210. package/dist/utils/statuses.js.map +0 -1
  211. package/dist/utils/templates.js +0 -197
  212. package/dist/utils/templates.js.map +0 -1
  213. package/dist/utils/tenant-storage.js +0 -88
  214. package/dist/utils/tenant-storage.js.map +0 -1
  215. package/dist/utils/vm.js +0 -434
  216. package/dist/utils/vm.js.map +0 -1
  217. package/dist/utils/with-spinner.js +0 -20
  218. package/dist/utils/with-spinner.js.map +0 -1
@@ -1,463 +0,0 @@
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.initializeProjectApp = void 0;
7
- const inquirer_1 = __importDefault(require("inquirer"));
8
- const inquirer_autocomplete_prompt_1 = __importDefault(require("inquirer-autocomplete-prompt"));
9
- const chalk_1 = __importDefault(require("chalk"));
10
- const path_1 = __importDefault(require("path"));
11
- const fs_extra_1 = __importDefault(require("fs-extra"));
12
- const child_process_1 = __importDefault(require("child_process"));
13
- const templates_1 = require("../../utils/templates");
14
- const with_spinner_1 = __importDefault(require("../../utils/with-spinner"));
15
- const publish_1 = require("./publish");
16
- const upload_description_1 = require("./upload-description");
17
- const types_1 = require("./types");
18
- const utils_1 = require("../../utils");
19
- const admin_api_1 = require("../../services/admin-api");
20
- const docker_credentials_1 = require("../../utils/docker-credentials");
21
- const registry_credentials_1 = require("../../utils/registry-credentials");
22
- const org_selector_1 = require("../../utils/org-selector");
23
- inquirer_1.default.registerPrompt('autocomplete', inquirer_autocomplete_prompt_1.default);
24
- const VALID_ARCHITECTURES = ['arm64', 'amd64'];
25
- const validateDockerUsername = (input) => {
26
- if (!input.trim())
27
- return 'Docker Hub username/organization is required';
28
- return true;
29
- };
30
- const validateArchitectures = (archs) => {
31
- if (archs.length < 1)
32
- return 'At least one architecture required';
33
- const invalid = archs.filter((a) => !VALID_ARCHITECTURES.includes(a));
34
- if (invalid.length)
35
- return `Invalid architecture(s): ${invalid.join(', ')}. Valid: ${VALID_ARCHITECTURES.join(', ')}`;
36
- return true;
37
- };
38
- const templates = {
39
- [types_1.ProjectType.Basic]: 'template-screen-html',
40
- [types_1.ProjectType.React]: 'template-screen-react',
41
- [types_1.ProjectType.Mobile]: 'template-mobile',
42
- [types_1.ProjectType.EdgeNode]: 'template-edge',
43
- [types_1.ProjectType.EdgePython]: 'template-edge-python',
44
- };
45
- const projectTemplates = [
46
- {
47
- type: 'list',
48
- name: 'projectType',
49
- message: 'What kind of app do you want to create?',
50
- choices: [
51
- {
52
- name: 'Screen Application (React)',
53
- value: types_1.ProjectType.React,
54
- },
55
- {
56
- name: 'Screen Application (HTML/JS)',
57
- value: types_1.ProjectType.Basic,
58
- },
59
- {
60
- name: 'Mobile Application (PWA React)',
61
- value: types_1.ProjectType.Mobile,
62
- },
63
- {
64
- name: 'Edge Application (Node.js)',
65
- value: types_1.ProjectType.EdgeNode,
66
- },
67
- {
68
- name: 'Edge Application (Python)',
69
- value: types_1.ProjectType.EdgePython,
70
- },
71
- ],
72
- },
73
- ];
74
- const projectTypeToAppType = {
75
- [types_1.ProjectType.Basic]: 'screen',
76
- [types_1.ProjectType.React]: 'screen',
77
- [types_1.ProjectType.Mobile]: 'mobile',
78
- [types_1.ProjectType.EdgeNode]: 'edge',
79
- [types_1.ProjectType.EdgePython]: 'edge',
80
- };
81
- const initializeProjectApp = async (project, displayName, type, options = {}) => {
82
- let organizationName = null;
83
- let organizationSlug = null;
84
- let projectName = null; // name with org prefix
85
- let projectType = type;
86
- // Validate type if provided via flag
87
- if (projectType) {
88
- const validTypes = Object.values(types_1.ProjectType);
89
- if (!validTypes.includes(projectType)) {
90
- throw new Error(`Invalid type '${projectType}'. Valid: ${validTypes.join(', ')}`);
91
- }
92
- }
93
- let registry;
94
- let imageName;
95
- let dockerUsername;
96
- let dockerRepoIsPrivate = false;
97
- let selectedArchitectures = ['arm64', 'amd64']; // Default to both
98
- let appDirectory;
99
- // Setup SIGINT handler for cleanup on Ctrl+C
100
- const cleanupOnExit = async () => {
101
- if (appDirectory && fs_extra_1.default.existsSync(appDirectory)) {
102
- console.log(chalk_1.default.yellow(`\nInterrupted. Cleaning up directory: ${path_1.default.basename(appDirectory)}`));
103
- try {
104
- await fs_extra_1.default.remove(appDirectory);
105
- console.log(chalk_1.default.green(`✓ Cleanup completed`));
106
- }
107
- catch (err) {
108
- console.error(chalk_1.default.red(`Failed to clean up: ${err.message}`));
109
- }
110
- }
111
- process.exit(130); // Exit code for SIGINT
112
- };
113
- process.on('SIGINT', cleanupOnExit);
114
- if (project.trim() === '.')
115
- throw new Error('Project name is invalid');
116
- const [org, app] = project.split('.');
117
- if (app && options.org) {
118
- throw new Error(`Cannot use --org flag when project name already contains an organization prefix ('${project}'). ` +
119
- `Use either '${app}' with --org, or '${project}' without --org.`);
120
- }
121
- if (!app) {
122
- if (options.org) {
123
- const organization = await (0, org_selector_1.getOrganizationBySlug)(options.org);
124
- if (!organization) {
125
- throw new Error(`Organization '${options.org}' not found`);
126
- }
127
- organizationSlug = organization.slug;
128
- organizationName = organization.displayName;
129
- projectName = `${organizationSlug}.${project}`;
130
- }
131
- else {
132
- // Use the shared organization selector that handles tenant persistence
133
- const organization = await (0, org_selector_1.selectOrganization)('Select the organization where you want to create and publish your app to:');
134
- if (!organization) {
135
- throw new Error('No organization selected');
136
- }
137
- organizationSlug = organization.slug;
138
- organizationName = organization.displayName;
139
- projectName = `${organizationSlug}.${project}`;
140
- if (!organizationSlug) {
141
- throw new Error('Organization is invalid');
142
- }
143
- }
144
- }
145
- else {
146
- const organizations = await (0, with_spinner_1.default)((0, admin_api_1.adminApi)().organizations.listOrganizations, 'Fetching organization list. Please wait...');
147
- const foundOrg = organizations
148
- .filter(({ organizationName: name }) => name === org)
149
- .shift();
150
- organizationSlug = foundOrg?.organizationName;
151
- organizationName = foundOrg?.displayName;
152
- if (!organizationSlug)
153
- throw Error(`Cannot find organization ${org}`);
154
- projectName = project; // already contains org prefix
155
- }
156
- if (!projectType) {
157
- const res = (await inquirer_1.default.prompt(projectTemplates));
158
- projectType = res.projectType;
159
- }
160
- appDirectory = path_1.default.join(process.cwd(), project.toLocaleLowerCase());
161
- console.log(chalk_1.default.gray(`Creating a new ${projectType} app in ${appDirectory}`));
162
- const template = templates[projectType];
163
- if (!template)
164
- throw new Error('Project template repository not found');
165
- // Validate that edge-only flags aren't used with non-edge types
166
- const isEdgeType = projectType === types_1.ProjectType.EdgeNode || projectType === types_1.ProjectType.EdgePython;
167
- if (!isEdgeType) {
168
- const edgeFlags = [
169
- options.registry && '--registry',
170
- options.dockerUsername && '--docker-username',
171
- options.image && '--image',
172
- options.private !== undefined && '--private/--no-private',
173
- options.arch && '--arch',
174
- ].filter(Boolean);
175
- if (edgeFlags.length) {
176
- throw new Error(`${edgeFlags.join(', ')} only apply to edge app types (edgenode, edgepython), not '${projectType}'`);
177
- }
178
- }
179
- // For Edge apps, configure container registry
180
- if (isEdgeType) {
181
- if (options.registry) {
182
- registry = options.registry;
183
- }
184
- else {
185
- const { registry: inputRegistry } = await inquirer_1.default.prompt([
186
- {
187
- type: 'input',
188
- name: 'registry',
189
- message: 'Enter container registry for the Edge app:',
190
- default: 'docker.io',
191
- },
192
- ]);
193
- registry = inputRegistry;
194
- }
195
- // Extract app name without tenant prefix for default image name
196
- const appNameWithoutTenant = project.split('.').length > 1 ? project.split('.')[1] : project;
197
- // Default Docker Hub username/organization to the first part of the project name (before the dot)
198
- const defaultOrg = organizationSlug;
199
- if (registry === 'docker.io') {
200
- // Docker Hub username
201
- if (options.dockerUsername) {
202
- const v = validateDockerUsername(options.dockerUsername);
203
- if (v !== true)
204
- throw new Error(v);
205
- dockerUsername = options.dockerUsername;
206
- }
207
- else {
208
- const { username } = await inquirer_1.default.prompt([
209
- {
210
- type: 'input',
211
- name: 'username',
212
- message: 'Enter your Docker Hub username or organization name:',
213
- default: defaultOrg,
214
- validate: validateDockerUsername,
215
- },
216
- ]);
217
- dockerUsername = username;
218
- }
219
- // Image name
220
- let inputImageName;
221
- if (options.image) {
222
- inputImageName = options.image;
223
- }
224
- else {
225
- const res = await inquirer_1.default.prompt([
226
- {
227
- type: 'input',
228
- name: 'imageName',
229
- message: 'Enter image name for the Docker container (without username/organization prefix):',
230
- default: appNameWithoutTenant,
231
- },
232
- ]);
233
- inputImageName = res.imageName;
234
- }
235
- // Check if registry is already prepended before creating the full imageName
236
- const registryPrefix = `${registry}/`;
237
- if (!inputImageName.startsWith(registryPrefix)) {
238
- imageName = `${registryPrefix}${dockerUsername}/${inputImageName}`;
239
- }
240
- else {
241
- imageName = inputImageName; // Use as is
242
- }
243
- console.log(chalk_1.default.dim(`Full image name will be: ${chalk_1.default.blue(imageName)}`));
244
- // Private repo
245
- if (options.private !== undefined) {
246
- dockerRepoIsPrivate = options.private;
247
- }
248
- else {
249
- const { isPrivate } = await inquirer_1.default.prompt([
250
- {
251
- type: 'confirm',
252
- name: 'isPrivate',
253
- message: 'Should the Docker Hub repository be private?',
254
- default: true,
255
- },
256
- ]);
257
- dockerRepoIsPrivate = isPrivate;
258
- }
259
- // Architectures
260
- if (options.arch) {
261
- const parsed = options.arch.split(',').map((s) => s.trim());
262
- const v = validateArchitectures(parsed);
263
- if (v !== true)
264
- throw new Error(v);
265
- selectedArchitectures = parsed;
266
- }
267
- else {
268
- const { architectures } = await inquirer_1.default.prompt([
269
- {
270
- type: 'checkbox',
271
- name: 'architectures',
272
- message: 'Which architectures should this Edge app support?',
273
- choices: [
274
- { name: 'ARM64 (arm64/v8)', value: 'arm64', checked: true },
275
- { name: 'AMD64 (x86_64)', value: 'amd64', checked: true },
276
- ],
277
- validate: validateArchitectures,
278
- },
279
- ]);
280
- selectedArchitectures = architectures;
281
- }
282
- }
283
- else {
284
- // Non-Docker Hub registry: only need image name
285
- let inputImageName;
286
- if (options.image) {
287
- inputImageName = options.image;
288
- }
289
- else {
290
- const res = await inquirer_1.default.prompt([
291
- {
292
- type: 'input',
293
- name: 'imageName',
294
- message: 'Enter image name for the Docker container ',
295
- default: appNameWithoutTenant,
296
- },
297
- ]);
298
- inputImageName = res.imageName;
299
- }
300
- // Check if registry is already prepended before creating the full imageName
301
- const registryPrefix = `${registry}/`;
302
- if (!inputImageName.startsWith(registryPrefix)) {
303
- imageName = `${registryPrefix}${inputImageName}`;
304
- }
305
- else {
306
- imageName = inputImageName; // Use as is
307
- }
308
- console.log(chalk_1.default.dim(`Full image name will be: ${chalk_1.default.blue(imageName)}`));
309
- }
310
- }
311
- // Only clone the repository (without installing dependencies)
312
- await (0, templates_1.cloneRepo)({
313
- destinationPath: appDirectory,
314
- repo: `https://github.com/phystack/${template}.git`,
315
- projectName,
316
- displayName,
317
- registry,
318
- type: projectTypeToAppType[projectType],
319
- imageName,
320
- dockerRepoIsPrivate,
321
- architectures: selectedArchitectures,
322
- });
323
- // Add Docker credentials verification for Edge apps
324
- if (isEdgeType && registry) {
325
- console.log(chalk_1.default.gray('Verifying Docker registry credentials'));
326
- const isNonInteractive = !!options.registry;
327
- const packageFile = path_1.default.join(appDirectory, 'package.json');
328
- await (0, docker_credentials_1.setupDockerCredentials)(registry, imageName, packageFile, imageName, isNonInteractive);
329
- }
330
- const descFile = fs_extra_1.default.existsSync(`${appDirectory}/DESCRIPTION.md`)
331
- ? `${appDirectory}/DESCRIPTION.md`
332
- : `${appDirectory}/README.md`;
333
- await (0, upload_description_1.updateDescription)(descFile, {
334
- applicationName: displayName,
335
- author: organizationName,
336
- });
337
- console.log(chalk_1.default.green(`✓ App cloned and description uploaded at ${appDirectory}`));
338
- // Remove SIGINT handler on success
339
- process.removeListener('SIGINT', cleanupOnExit);
340
- return {
341
- appDirectory,
342
- projectType,
343
- organizationSlug,
344
- projectName,
345
- registry,
346
- imageName,
347
- dockerUsername,
348
- };
349
- };
350
- exports.initializeProjectApp = initializeProjectApp;
351
- const create = async (project, options) => {
352
- let pname = (0, utils_1.kebabCase)(project || '');
353
- let displayName = project || pname;
354
- try {
355
- while (!pname || pname.trim() === '') {
356
- const { name } = await inquirer_1.default.prompt([
357
- {
358
- name: 'name',
359
- type: 'input',
360
- message: 'Enter name for your app:',
361
- },
362
- ]);
363
- pname = (0, utils_1.kebabCase)(name);
364
- displayName = name;
365
- }
366
- console.log(chalk_1.default.gray(`Creating app with name: ${chalk_1.default.blue(pname)}`));
367
- const resultInitApp = await (0, exports.initializeProjectApp)(pname, displayName, options.type, options);
368
- const { appDirectory, projectType, projectName, registry, imageName, dockerUsername, } = resultInitApp;
369
- // Step 1: Register the app immediately after cloning and updating package.json.
370
- console.log(chalk_1.default.gray(`Registering app ${chalk_1.default.blue(projectName)} in your private marketplace`));
371
- const registeredApp = await (0, publish_1.registerApp)(undefined, { appDir: appDirectory });
372
- // If this is an Edge app with a registry, ensure we have push credentials
373
- if ((projectType === types_1.ProjectType.EdgeNode || projectType === types_1.ProjectType.EdgePython) &&
374
- registry) {
375
- const storedCredentials = await (0, registry_credentials_1.getRegistryCredentials)(registry);
376
- if (storedCredentials?.push?.username && storedCredentials?.push?.password) {
377
- console.log(chalk_1.default.dim('Using stored registry push credentials'));
378
- try {
379
- child_process_1.default.execSync(`docker login ${registry} -u ${storedCredentials.push.username} -p ${storedCredentials.push.password}`, {
380
- stdio: 'pipe', // Prevent password from showing in logs
381
- });
382
- }
383
- catch (error) {
384
- console.log(chalk_1.default.yellow('Warning: Failed to authenticate with Docker registry'));
385
- console.error(chalk_1.default.dim('Error details:', error.message));
386
- }
387
- }
388
- }
389
- // Now install dependencies and build the project.
390
- console.log(chalk_1.default.gray('Installing template dependencies and building the project. This may take a while...'));
391
- await (0, templates_1.installRepo)({
392
- destinationPath: appDirectory,
393
- projectName,
394
- displayName,
395
- registry,
396
- });
397
- // Upload the gridapp and create release
398
- if (options.publish !== false) {
399
- console.log(chalk_1.default.gray('Publishing gridapp'));
400
- // Run yarn pub in the app directory (uses the app's local CLI, not global)
401
- await new Promise((resolve, reject) => {
402
- const pub = child_process_1.default.spawn('yarn', ['pub'], {
403
- cwd: appDirectory,
404
- stdio: 'inherit',
405
- shell: true,
406
- env: {
407
- ...process.env,
408
- FORCE_COLOR: '1',
409
- },
410
- });
411
- pub.on('close', (code) => {
412
- if (code !== 0) {
413
- reject(new Error('yarn pub failed'));
414
- }
415
- else {
416
- resolve(null);
417
- }
418
- });
419
- });
420
- }
421
- else {
422
- console.log(chalk_1.default.gray('Skipping publish (--no-publish)'));
423
- }
424
- }
425
- catch (err) {
426
- console.error(chalk_1.default.red(`❗️There was an error creating the app:`));
427
- if (err.response) {
428
- // Handle API error responses
429
- console.error(chalk_1.default.red(`Status: ${err.response.status}`));
430
- console.error(chalk_1.default.red(`Message: ${err.response.data?.message || err.message}`));
431
- if (err.response.data?.details) {
432
- console.error(chalk_1.default.dim('Details:', JSON.stringify(err.response.data.details, null, 2)));
433
- }
434
- }
435
- else if (err.code === 'ENOENT') {
436
- // Handle file system errors
437
- console.error(chalk_1.default.red(`File not found: ${err.path}`));
438
- }
439
- else {
440
- // Handle other types of errors
441
- console.error(chalk_1.default.red(err.message));
442
- if (err.stack) {
443
- console.error(chalk_1.default.dim('Stack trace:', err.stack));
444
- }
445
- }
446
- // Clean up any partially created files/directories if needed
447
- try {
448
- if (pname && fs_extra_1.default.existsSync(path_1.default.join(process.cwd(), pname.toLowerCase()))) {
449
- console.log(chalk_1.default.yellow(`Cleaning up directory: ${pname.toLowerCase()}`));
450
- await fs_extra_1.default.remove(path_1.default.join(process.cwd(), pname.toLowerCase()));
451
- console.log(chalk_1.default.green(`✓ Cleanup completed`));
452
- }
453
- }
454
- catch (cleanupErr) {
455
- console.error(chalk_1.default.red(`Failed to clean up: ${cleanupErr.message}`));
456
- }
457
- // Remove SIGINT handler before exit
458
- // Note: cleanupOnExit is not accessible here, but process will exit anyway
459
- process.exit(1);
460
- }
461
- };
462
- exports.default = create;
463
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/app/create.ts"],"names":[],"mappings":"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"}
@@ -1,176 +0,0 @@
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
- const child_process_1 = require("child_process");
7
- const path_1 = __importDefault(require("path"));
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const inquirer_1 = __importDefault(require("inquirer"));
10
- const build_container_remote_1 = __importDefault(require("./build-container-remote"));
11
- const fs_1 = __importDefault(require("fs"));
12
- const isIpAddress = (name) => {
13
- const ipPattern = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
14
- return ipPattern.test(name);
15
- };
16
- exports.default = async (deviceName, options) => {
17
- console.log('Deploying to device: ', deviceName);
18
- if (!deviceName) {
19
- throw new Error('Please provide a device hostname.\nUsage: grid app deploy <device-hostname>');
20
- }
21
- // Check if we should use local phygrid-npm
22
- const useLocalPhygridNpm = process.env.PHYGRID_LOCAL_NPM === 'true';
23
- if (useLocalPhygridNpm) {
24
- console.log(chalk_1.default.cyan('Using local phygrid-npm packages for deployment'));
25
- }
26
- const deviceHostname = isIpAddress(deviceName) || deviceName.endsWith('.local')
27
- ? deviceName
28
- : `${deviceName}.local`;
29
- const sourceDir = process.cwd();
30
- // Detect project structure - determine if we're in projects/X or directly in a project
31
- const moduleName = path_1.default.basename(sourceDir);
32
- const isInProjectsDir = path_1.default.basename(path_1.default.dirname(sourceDir)) === 'projects';
33
- // Set remoteDir based on whether we're in the projects directory or not
34
- const remoteDir = isInProjectsDir
35
- ? `~/projects/${moduleName}`
36
- : `~/${moduleName}`;
37
- // Determine the root directory and phygrid-npm path
38
- const rootDir = isInProjectsDir
39
- ? path_1.default.resolve(sourceDir, '../../')
40
- : path_1.default.resolve(sourceDir, '../');
41
- const phygridNpmDir = path_1.default.join(rootDir, 'repos/phygrid-npm');
42
- // Check if phygrid-npm exists when using local packages
43
- if (useLocalPhygridNpm && !fs_1.default.existsSync(phygridNpmDir)) {
44
- throw new Error(`Local phygrid-npm directory not found at ${phygridNpmDir}. Cannot deploy with local packages.`);
45
- }
46
- // Ensure remote directory structure exists
47
- if (isInProjectsDir) {
48
- await runRemoteCommand(deviceHostname, 'mkdir -p ~/projects');
49
- }
50
- // Setup rsync source and target paths
51
- const rsyncSource = '.'; // Current directory
52
- const rsyncTarget = `dev@${deviceHostname}:${remoteDir}`;
53
- // Setup rsync process for the main application
54
- const rsyncProcess = (0, child_process_1.spawn)('rsync', [
55
- '-avr',
56
- '--exclude=node_modules',
57
- '--exclude=dist',
58
- '--exclude=.git',
59
- '--delete',
60
- rsyncSource,
61
- rsyncTarget,
62
- ]);
63
- rsyncProcess.stdout.pipe(process.stdout);
64
- rsyncProcess.stderr.pipe(process.stderr);
65
- return new Promise((resolve, reject) => {
66
- rsyncProcess.on('error', async (error) => {
67
- if (error.code === 'ENOENT') {
68
- reject(new Error('rsync command not found. Please install rsync.'));
69
- }
70
- reject(error);
71
- });
72
- rsyncProcess.on('close', async (code) => {
73
- if (code !== 0) {
74
- console.log(chalk_1.default.red('\nFailed to connect to the device.'));
75
- const { needsHelp } = await inquirer_1.default.prompt([
76
- {
77
- type: 'confirm',
78
- name: 'needsHelp',
79
- message: '\nHave you:\n' +
80
- '1. Enabled developer mode on the target device?\n' +
81
- '2. Ensured you are on the same local network as the device?\n' +
82
- '\nWould you like instructions on how to enable developer mode?',
83
- },
84
- ]);
85
- if (needsHelp) {
86
- console.log(chalk_1.default.cyan('\nTo enable developer mode:\n'));
87
- console.log('1. Run: phy dev shell <device-name>');
88
- console.log('2. Select "Advanced" from the menu');
89
- console.log('3. Choose "Enable Developer Mode"');
90
- console.log('4. Follow the prompts to set up authentication');
91
- console.log(chalk_1.default.dim('\nAfter completing these steps, try running this deploy command again.'));
92
- }
93
- reject(new Error('Failed to deploy to device'));
94
- return;
95
- }
96
- // If using local packages, sync the phygrid-npm directory
97
- if (useLocalPhygridNpm) {
98
- console.log(chalk_1.default.dim('\nSyncing local phygrid-npm directory...'));
99
- // Create the repos directory on the remote
100
- await runRemoteCommand(deviceHostname, 'mkdir -p ~/repos');
101
- const phygridNpmRsyncProcess = (0, child_process_1.spawn)('rsync', [
102
- '-avr',
103
- '--exclude=node_modules',
104
- '--exclude=dist',
105
- '--exclude=.git',
106
- '--delete',
107
- phygridNpmDir, // Local phygrid-npm directory
108
- `dev@${deviceHostname}:~/repos/`, // Remote repos directory
109
- ]);
110
- phygridNpmRsyncProcess.stdout.pipe(process.stdout);
111
- phygridNpmRsyncProcess.stderr.pipe(process.stderr);
112
- phygridNpmRsyncProcess.on('error', (error) => {
113
- console.error(chalk_1.default.red(`Failed to sync phygrid-npm: ${error.message}`));
114
- reject(error);
115
- });
116
- phygridNpmRsyncProcess.on('close', async (syncCode) => {
117
- if (syncCode !== 0) {
118
- console.error(chalk_1.default.red('Failed to sync phygrid-npm directory'));
119
- reject(new Error('Failed to sync phygrid-npm'));
120
- return;
121
- }
122
- console.log(chalk_1.default.dim('phygrid-npm sync completed successfully'));
123
- proceedWithBuild();
124
- });
125
- }
126
- else {
127
- proceedWithBuild();
128
- }
129
- async function proceedWithBuild() {
130
- try {
131
- console.log(chalk_1.default.dim('\nRsync completed successfully. Building Docker container...'));
132
- await (0, build_container_remote_1.default)(moduleName, {
133
- deviceHostname,
134
- remoteDir,
135
- phygridLocalNpm: useLocalPhygridNpm,
136
- isInProjectsDir,
137
- });
138
- console.log(chalk_1.default.green('✓ Deploy completed successfully'));
139
- resolve(null);
140
- }
141
- catch (error) {
142
- reject(error);
143
- }
144
- }
145
- });
146
- });
147
- };
148
- // Helper function to run remote commands
149
- async function runRemoteCommand(deviceHostname, command, checkOutput = false) {
150
- return new Promise((resolve, reject) => {
151
- let output = '';
152
- const sshProcess = (0, child_process_1.spawn)('ssh', ['-tt', `dev@${deviceHostname}`, `TERM=xterm-256color ${command}`], {
153
- stdio: checkOutput
154
- ? ['inherit', 'pipe', 'inherit']
155
- : ['inherit', 'inherit', 'inherit'],
156
- });
157
- if (checkOutput) {
158
- sshProcess.stdout?.on('data', (data) => {
159
- output += data.toString();
160
- });
161
- }
162
- sshProcess.on('close', (code) => {
163
- if (checkOutput) {
164
- resolve(output.trim());
165
- }
166
- else {
167
- resolve(code === 0);
168
- }
169
- });
170
- sshProcess.on('error', (error) => {
171
- console.error(chalk_1.default.red(`Failed to execute remote command: ${error.message}`));
172
- reject(error);
173
- });
174
- });
175
- }
176
- //# sourceMappingURL=deploy.js.map