@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,224 @@
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 openid_client_1 = require("openid-client");
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const proxy_1 = require("../../utils/proxy");
11
+ const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.config', 'phygrid-cli');
12
+ const CLIENT_ID = 'grid-cli';
13
+ const getPhygridIdBaseUrlByGridEnv = (gridEnv = '') => {
14
+ const formattedGridEnv = gridEnv.toUpperCase();
15
+ switch (formattedGridEnv) {
16
+ case 'LOCAL':
17
+ return 'http://localhost:3010/';
18
+ case 'DEV':
19
+ return 'https://id.griddeveloper.com/';
20
+ case 'QA':
21
+ return 'https://id-qa.ombori.com/';
22
+ case 'PROD':
23
+ return 'https://id.ombori.com/';
24
+ default:
25
+ return 'https://id.ombori.com/';
26
+ }
27
+ };
28
+ const getAuthFilePathBasedOnGridEnv = (gridEnv = '') => {
29
+ const formattedGridEnv = gridEnv.toUpperCase();
30
+ switch (formattedGridEnv) {
31
+ case 'LOCAL':
32
+ return path_1.default.join(CONFIG_DIR, 'auth-local');
33
+ case 'DEV':
34
+ return path_1.default.join(CONFIG_DIR, 'auth-dev');
35
+ case 'QA':
36
+ return path_1.default.join(CONFIG_DIR, 'auth-qa');
37
+ case 'PROD':
38
+ return path_1.default.join(CONFIG_DIR, 'auth');
39
+ default:
40
+ return path_1.default.join(CONFIG_DIR, 'auth');
41
+ }
42
+ };
43
+ class AuthService {
44
+ constructor() {
45
+ this.storeDeveloperToken = async (token) => {
46
+ if (!this.validateToken(token)) {
47
+ throw new Error('Invalid developer token format');
48
+ }
49
+ fs_1.default.writeFileSync(this.developerTokenPath, JSON.stringify({ token }));
50
+ };
51
+ this.getDeveloperToken = () => {
52
+ if (fs_1.default.existsSync(this.developerTokenPath)) {
53
+ const data = JSON.parse(fs_1.default.readFileSync(this.developerTokenPath, 'utf8'));
54
+ return data.token;
55
+ }
56
+ return null;
57
+ };
58
+ this.getClient = async () => {
59
+ const httpsAgent = (0, proxy_1.getHttpsProxyAgent)();
60
+ if (httpsAgent) {
61
+ openid_client_1.custom.setHttpOptionsDefaults({
62
+ agent: httpsAgent,
63
+ });
64
+ }
65
+ const issuer = await openid_client_1.Issuer.discover(this.phygridIdBaseUrl);
66
+ const client = new issuer.Client({
67
+ client_id: CLIENT_ID,
68
+ token_endpoint_auth_method: 'none',
69
+ });
70
+ if (httpsAgent) {
71
+ client[openid_client_1.custom.http_options] = () => {
72
+ return { agent: httpsAgent };
73
+ };
74
+ }
75
+ return client;
76
+ };
77
+ this.authenticate = async ({ onDeviceAuthorizationRequestStart, }) => {
78
+ const client = await this.getClient();
79
+ const handle = await client.deviceAuthorization({
80
+ scope: 'openid email profile offline_access',
81
+ prompt: 'consent',
82
+ });
83
+ onDeviceAuthorizationRequestStart({
84
+ verificationUri: handle.verification_uri,
85
+ verificationUriComplete: handle.verification_uri_complete,
86
+ code: handle.user_code,
87
+ codeExpiresIn: handle.expires_in,
88
+ });
89
+ let tokenSet;
90
+ let interval = 3; // Polling interval in seconds
91
+ const expirationTime = Date.now() + handle.expires_in * 1000; // Convert expires_in to milliseconds
92
+ while (Date.now() < expirationTime) {
93
+ await new Promise((resolve) => setTimeout(resolve, interval * 1000));
94
+ try {
95
+ tokenSet = await client.grant({
96
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
97
+ device_code: handle.device_code,
98
+ });
99
+ fs_1.default.writeFileSync(this.tokensPath, JSON.stringify(tokenSet));
100
+ break;
101
+ }
102
+ catch (err) {
103
+ if (err.error === 'authorization_pending') {
104
+ // Authorization is still pending, keep polling
105
+ continue;
106
+ }
107
+ else if (err.error === 'slow_down') {
108
+ // Increase polling interval if the server asks for it
109
+ interval += 5;
110
+ }
111
+ else {
112
+ throw err;
113
+ }
114
+ }
115
+ }
116
+ };
117
+ this.getTokens = () => {
118
+ try {
119
+ if (fs_1.default.existsSync(this.tokensPath)) {
120
+ return new openid_client_1.TokenSet(JSON.parse(fs_1.default.readFileSync(this.tokensPath, 'utf8')));
121
+ }
122
+ }
123
+ catch (error) {
124
+ console.error('Error reading tokens:', error);
125
+ }
126
+ return null;
127
+ };
128
+ this.storeTokens = async (tokens) => {
129
+ fs_1.default.writeFileSync(this.tokensPath, JSON.stringify(tokens));
130
+ };
131
+ this.getAccessToken = () => {
132
+ // First check environment variable
133
+ const envToken = process.env.PHYGRID_DEVELOPER_TOKEN;
134
+ if (envToken) {
135
+ return envToken;
136
+ }
137
+ // Then check stored developer token
138
+ if (fs_1.default.existsSync(this.developerTokenPath)) {
139
+ try {
140
+ const data = JSON.parse(fs_1.default.readFileSync(this.developerTokenPath, 'utf8'));
141
+ return data.token;
142
+ }
143
+ catch (error) {
144
+ console.error('Error reading developer token:', error);
145
+ }
146
+ }
147
+ // Finally check device tokens
148
+ const tokens = this.getTokens();
149
+ return tokens ? tokens.access_token : null;
150
+ };
151
+ this.refreshToken = async () => {
152
+ // First check for developer token (environment variable)
153
+ const envToken = process.env.PHYGRID_DEVELOPER_TOKEN;
154
+ if (envToken) {
155
+ // No need to refresh developer tokens
156
+ return { access_token: envToken };
157
+ }
158
+ // Then check for stored developer token
159
+ if (fs_1.default.existsSync(this.developerTokenPath)) {
160
+ try {
161
+ const data = JSON.parse(fs_1.default.readFileSync(this.developerTokenPath, 'utf8'));
162
+ // No need to refresh developer tokens
163
+ return { access_token: data.token };
164
+ }
165
+ catch (error) {
166
+ console.error('Error reading developer token:', error);
167
+ }
168
+ }
169
+ // If no developer token is found, then try to refresh the regular token
170
+ const tokens = this.getTokens();
171
+ if (!tokens || !tokens.refresh_token) {
172
+ throw new Error('Unauthorized, No refresh token found. Please run `phy login` to use this command. ');
173
+ }
174
+ const client = await this.getClient();
175
+ try {
176
+ const refreshedTokenSet = await client.refresh(tokens.refresh_token);
177
+ fs_1.default.writeFileSync(this.tokensPath, JSON.stringify(refreshedTokenSet));
178
+ return refreshedTokenSet;
179
+ }
180
+ catch (error) {
181
+ if (error.error === 'invalid_grant') {
182
+ throw new Error('Unauthorized, token has expired. Please run `phy login` to use this command.');
183
+ }
184
+ }
185
+ };
186
+ this.logout = async () => {
187
+ const tokens = this.getTokens();
188
+ if (tokens) {
189
+ const client = await this.getClient();
190
+ if (tokens.access_token) {
191
+ await client.revoke(tokens.access_token, 'access_token');
192
+ }
193
+ if (tokens.refresh_token) {
194
+ await client.revoke(tokens.refresh_token, 'refresh_token');
195
+ }
196
+ fs_1.default.unlinkSync(this.tokensPath);
197
+ return;
198
+ }
199
+ throw new Error('No tokens found.');
200
+ };
201
+ this.startDeviceFlow = async () => {
202
+ const issuer = await openid_client_1.Issuer.discover(this.phygridIdBaseUrl);
203
+ const client = new issuer.Client({
204
+ client_id: CLIENT_ID,
205
+ token_endpoint_auth_method: 'none',
206
+ });
207
+ return await client.deviceAuthorization();
208
+ };
209
+ const { PHYGRID_ENV, OMBORI_ID_URL, PHYGRID_CLI_AUTH_FILE_PATH } = process.env;
210
+ this.phygridIdBaseUrl = OMBORI_ID_URL || getPhygridIdBaseUrlByGridEnv(PHYGRID_ENV);
211
+ this.tokensPath =
212
+ PHYGRID_CLI_AUTH_FILE_PATH || getAuthFilePathBasedOnGridEnv(PHYGRID_ENV);
213
+ this.developerTokenPath = path_1.default.join(CONFIG_DIR, 'developer-token.json');
214
+ // Ensure config directory exists
215
+ if (!fs_1.default.existsSync(CONFIG_DIR)) {
216
+ fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
217
+ }
218
+ }
219
+ validateToken(token) {
220
+ return token && token.length >= 10;
221
+ }
222
+ }
223
+ exports.default = AuthService;
224
+ //# sourceMappingURL=device-grant-auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-grant-auth.service.js","sourceRoot":"","sources":["../../../src/services/auth/device-grant-auth.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
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.phyhubApi = exports.handlePhyhubError = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const axios_auth_refresh_1 = __importDefault(require("axios-auth-refresh"));
9
+ const https_proxy_agent_1 = require("https-proxy-agent");
10
+ const http_proxy_agent_1 = require("http-proxy-agent");
11
+ const http_1 = __importDefault(require("http"));
12
+ const https_1 = __importDefault(require("https"));
13
+ const device_grant_auth_service_1 = __importDefault(require("../auth/device-grant-auth.service"));
14
+ const handlePhyhubError = (error, operationName = 'Phyhub operation') => {
15
+ if (axios_1.default.isAxiosError(error)) {
16
+ const axiosError = error;
17
+ if (axiosError.response?.data) {
18
+ const phyhubErrorData = axiosError.response.data;
19
+ // Check if it's a validation error
20
+ if (phyhubErrorData.type === 'ValidationError') {
21
+ // Print the main validation error message
22
+ console.error(`${operationName} failed: ${phyhubErrorData.message || 'Validation error'}`);
23
+ // If there are validation details, print them
24
+ if (phyhubErrorData.data?.validationErrors?.length) {
25
+ console.error('Validation details:');
26
+ // Cast to the validation error type
27
+ const validationError = phyhubErrorData;
28
+ // Print each validation error
29
+ validationError.data.validationErrors.forEach((err) => {
30
+ console.error(`- [${err.path}]: ${err.message} (${err.code})`);
31
+ });
32
+ }
33
+ }
34
+ else {
35
+ // Just print the error message for non-validation errors
36
+ console.error(`${operationName} failed: ${phyhubErrorData.message || 'Unknown error'}`);
37
+ }
38
+ }
39
+ else {
40
+ console.error(`${operationName} failed: ${axiosError.message}`);
41
+ }
42
+ }
43
+ else if (error instanceof Error) {
44
+ console.error(`${operationName} failed: ${error.message}`);
45
+ }
46
+ else {
47
+ console.error(`${operationName} failed with unknown error`);
48
+ }
49
+ // Rethrow the error
50
+ throw error;
51
+ };
52
+ exports.handlePhyhubError = handlePhyhubError;
53
+ class PhyhubService {
54
+ constructor() {
55
+ this.getTwinDescriptorByName = async (phyhubUrl, tenantId, descriptorName) => {
56
+ try {
57
+ const response = await this.axiosInstance.get(`/api/v1/admin/tenant/${tenantId}/twin-descriptors/${descriptorName}`, {
58
+ baseURL: phyhubUrl,
59
+ });
60
+ return response.data.data;
61
+ }
62
+ catch (error) {
63
+ return (0, exports.handlePhyhubError)(error, `Fetching twin descriptor "${descriptorName}"`);
64
+ }
65
+ };
66
+ /**
67
+ * Create a new version of a twin descriptor
68
+ * @param phyhubUrl The URL of the Phyhub instance
69
+ * @param payload The payload containing version details
70
+ * @returns Promise resolving to the created descriptor version
71
+ */
72
+ this.createTwinDescriptorVersion = async (phyhubUrl, payload) => {
73
+ try {
74
+ const response = await this.axiosInstance.post(`/api/v1/admin/tenant/${payload.tenantId}/twin-descriptors/${payload.descriptorName}/versions`, {
75
+ version: payload.version,
76
+ schema: payload.schema,
77
+ metaSchema: payload.metaSchema,
78
+ releaseNotes: payload.releaseNotes,
79
+ }, {
80
+ baseURL: phyhubUrl,
81
+ });
82
+ return response.data.data;
83
+ }
84
+ catch (error) {
85
+ return (0, exports.handlePhyhubError)(error, `Creating twin descriptor version "${payload.version}" for descriptor "${payload.descriptorName}"`);
86
+ }
87
+ };
88
+ /**
89
+ * Create a new twin descriptor
90
+ * @param phyhubUrl The URL of the Phyhub instance
91
+ * @param payload The payload containing descriptor details
92
+ * @returns Promise resolving to the created descriptor
93
+ */
94
+ this.createTwinDescriptor = async (phyhubUrl, payload) => {
95
+ try {
96
+ const response = await this.axiosInstance.post(`/api/v1/admin/tenant/${payload.tenantId}/twin-descriptors`, {
97
+ name: payload.name,
98
+ displayName: payload.displayName,
99
+ description: payload.description,
100
+ descriptorVersion: {
101
+ version: payload.descriptorVersion.version,
102
+ schema: payload.descriptorVersion.schema,
103
+ metaSchema: payload.descriptorVersion.metaSchema,
104
+ releaseNotes: payload.descriptorVersion.releaseNotes,
105
+ },
106
+ }, {
107
+ baseURL: phyhubUrl,
108
+ });
109
+ return response.data.data;
110
+ }
111
+ catch (error) {
112
+ return (0, exports.handlePhyhubError)(error, `Creating twin descriptor "${payload.name}"`);
113
+ }
114
+ };
115
+ this.authService = new device_grant_auth_service_1.default();
116
+ const token = this.authService.getAccessToken();
117
+ if (!token) {
118
+ throw new Error('Unauthorized. Please run "phy login" to use this command.');
119
+ }
120
+ const proxyUrl = process.env.HTTPS_PROXY ||
121
+ process.env.HTTP_PROXY ||
122
+ process.env.https_proxy ||
123
+ process.env.http_proxy;
124
+ if (proxyUrl) {
125
+ const httpAgent = new http_proxy_agent_1.HttpProxyAgent(proxyUrl, {
126
+ keepAlive: true,
127
+ });
128
+ const httpsAgent = new https_proxy_agent_1.HttpsProxyAgent(proxyUrl, {
129
+ keepAlive: true,
130
+ rejectUnauthorized: true,
131
+ });
132
+ this.axiosInstance = axios_1.default.create({
133
+ proxy: false,
134
+ headers: {
135
+ Authorization: `Bearer ${this.authService.getAccessToken()}`,
136
+ 'Content-Type': 'application/json',
137
+ },
138
+ maxBodyLength: Infinity,
139
+ maxContentLength: Infinity,
140
+ httpAgent,
141
+ httpsAgent,
142
+ timeout: 60000,
143
+ validateStatus(status) {
144
+ return status >= 200 && status < 300;
145
+ },
146
+ });
147
+ }
148
+ else {
149
+ this.axiosInstance = axios_1.default.create({
150
+ headers: {
151
+ Authorization: `Bearer ${this.authService.getAccessToken()}`,
152
+ 'Content-Type': 'application/json',
153
+ },
154
+ maxBodyLength: Infinity,
155
+ maxContentLength: Infinity,
156
+ httpAgent: new http_1.default.Agent({ keepAlive: true }),
157
+ httpsAgent: new https_1.default.Agent({
158
+ keepAlive: true,
159
+ rejectUnauthorized: true,
160
+ }),
161
+ timeout: 60000,
162
+ validateStatus(status) {
163
+ return status >= 200 && status < 300;
164
+ },
165
+ });
166
+ }
167
+ this.axiosInstance.interceptors.response.use((response) => response, async (error) => {
168
+ if (error.code === 'EPIPE' || error.code === 'ECONNRESET') {
169
+ const { config } = error;
170
+ if (!config.retryAttempted) {
171
+ // eslint-disable-next-line no-param-reassign
172
+ config.retryAttempted = true;
173
+ return this.axiosInstance(config);
174
+ }
175
+ }
176
+ return Promise.reject(error);
177
+ });
178
+ (0, axios_auth_refresh_1.default)(this.axiosInstance, async (failedRequest) => {
179
+ await this.authService.refreshToken();
180
+ // eslint-disable-next-line no-param-reassign
181
+ failedRequest.response.config.headers.Authorization = `Bearer ${this.authService.getAccessToken()}`;
182
+ });
183
+ this.axiosInstance.interceptors.response.use((response) => {
184
+ return response;
185
+ }, (error) => {
186
+ // If the request failed with ECONNREFUSED, log 'Unauthorized'
187
+ let customError = null;
188
+ if (error.code === 'ECONNREFUSED') {
189
+ customError = new Error(`Unauthorized. Please run "phy login" to use this command. ${error.message}`);
190
+ }
191
+ // If you want to handle the error in the catch block of the request,
192
+ // you should reject the error here
193
+ return Promise.reject(customError || error);
194
+ });
195
+ }
196
+ }
197
+ const phyhubApi = () => new PhyhubService();
198
+ exports.phyhubApi = phyhubApi;
199
+ exports.default = PhyhubService;
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/phyhub/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=phyhub.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phyhub.types.js","sourceRoot":"","sources":["../../../src/services/phyhub/phyhub.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
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.fetchDevicesFromPhyHub = fetchDevicesFromPhyHub;
7
+ exports.formatDeviceForDisplay = formatDeviceForDisplay;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const admin_api_1 = require("../services/admin-api");
10
+ const with_spinner_1 = __importDefault(require("./with-spinner"));
11
+ /**
12
+ * Fetch devices from PhyHub for a specific organization
13
+ * @param organization Organization to fetch devices for
14
+ * @param limit Maximum number of devices to fetch
15
+ * @param page Page number for pagination
16
+ * @param search Optional search term to filter devices
17
+ * @returns Array of devices or null if fetch failed
18
+ */
19
+ async function fetchDevicesFromPhyHub(organization, limit = 20, page = 1, search) {
20
+ const { id: organizationId, phyhubUrl } = organization;
21
+ if (!phyhubUrl) {
22
+ console.log(chalk_1.default.yellow(`No PhyHub URL found for organization ${organization.slug}`));
23
+ return null;
24
+ }
25
+ // Fetch devices from PhyHub using the built-in method that handles authentication
26
+ return (0, with_spinner_1.default)(async () => {
27
+ try {
28
+ // Use the built-in method from adminApi that properly handles authentication
29
+ const response = await (0, admin_api_1.adminApi)().organizations.fetchDevicesFromPhyhub(organizationId, phyhubUrl, limit, page, search);
30
+ // Handle response
31
+ if (response.status === 404) {
32
+ console.log(chalk_1.default.yellow('No devices found for this organization.'));
33
+ return null;
34
+ }
35
+ // Try to extract devices from different possible response structures
36
+ let devices = [];
37
+ let totalDevices = 0;
38
+ let totalPages = 0;
39
+ if (response.data?.data?.docs) {
40
+ // Format: response.data.data.docs[]
41
+ devices = response.data.data.docs;
42
+ totalDevices = response.data.data.totalDocs || 0;
43
+ totalPages = response.data.data.totalPages || 0;
44
+ }
45
+ else if (response.data?.docs) {
46
+ // Format: response.data.docs[]
47
+ devices = response.data.docs;
48
+ totalDevices = response.data.totalDocs || 0;
49
+ totalPages = response.data.totalPages || 0;
50
+ }
51
+ else if (Array.isArray(response.data)) {
52
+ // Format: response.data[]
53
+ devices = response.data;
54
+ }
55
+ else if (response.data?.data && Array.isArray(response.data.data)) {
56
+ // Format: response.data.data[]
57
+ devices = response.data.data;
58
+ }
59
+ else {
60
+ // No recognizable format
61
+ console.log(chalk_1.default.yellow('Could not find devices in response.'));
62
+ return null;
63
+ }
64
+ // Show pagination info if available
65
+ if (totalDevices > 0 && totalPages > 1) {
66
+ console.log(chalk_1.default.dim(`Showing page ${page} of ${totalPages} (${totalDevices} total devices)`));
67
+ }
68
+ return devices;
69
+ }
70
+ catch (error) {
71
+ console.error(chalk_1.default.red(`Error fetching devices: ${error.message}`));
72
+ if (error.response && error.response.status) {
73
+ console.error(chalk_1.default.red(`API Error: ${error.response.status} ${error.response.statusText}`));
74
+ }
75
+ return null;
76
+ }
77
+ }, 'Fetching devices. Please wait...');
78
+ }
79
+ /**
80
+ * Format a device for display
81
+ * @param device Device to format
82
+ * @returns Formatted device object for display
83
+ */
84
+ function formatDeviceForDisplay(device) {
85
+ return {
86
+ id: device.id || device._id || '',
87
+ displayName: device.displayName || device.deviceName || device.name || 'Unnamed Device',
88
+ deviceSerial: device.deviceSerial || device.serial || '',
89
+ status: device.status || 'Unknown',
90
+ };
91
+ }
92
+ //# sourceMappingURL=device-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-fetcher.js","sourceRoot":"","sources":["../../src/utils/device-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
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.fetchDeviceByName = exports.fetchDevices = exports.fetchAllDevices = void 0;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ /* eslint no-return-await: "error" */
9
+ const with_spinner_1 = __importDefault(require("./with-spinner"));
10
+ const admin_api_1 = require("../services/admin-api");
11
+ const fetchAllDevices = async (fields, usePhyhub = false) => {
12
+ if (usePhyhub) {
13
+ return (0, with_spinner_1.default)(() => (0, admin_api_1.adminApi)().devices.listAllDevicesLegacyPhyhub(fields.join()), 'Fetching phyhub devices');
14
+ }
15
+ return (0, with_spinner_1.default)(() => (0, admin_api_1.adminApi)().devices.listAllDevicesLegacyEdge(fields.join()), 'Fetching devices');
16
+ };
17
+ exports.fetchAllDevices = fetchAllDevices;
18
+ const fetchDevices = async (limit = 100, page = 1, title = 'Fetching list of devices') => {
19
+ const res = await (0, with_spinner_1.default)(() => (0, admin_api_1.adminApi)().devices.listPaginatedDevices({
20
+ limit,
21
+ page,
22
+ }), title);
23
+ return res;
24
+ };
25
+ exports.fetchDevices = fetchDevices;
26
+ const fetchDeviceByName = async (deviceName) => {
27
+ let name = '';
28
+ const deviceNameArr = deviceName.split('.');
29
+ const [targetOrgSlug, targetDeviceName] = deviceNameArr;
30
+ if (deviceNameArr.length === 2) {
31
+ name = targetDeviceName;
32
+ }
33
+ else {
34
+ name = targetOrgSlug;
35
+ }
36
+ console.log('NAME:', name);
37
+ const res = await (0, with_spinner_1.default)(() => (0, admin_api_1.adminApi)().devices.getDeviceByName(name), `Finding device ${deviceName}`);
38
+ return res;
39
+ };
40
+ exports.fetchDeviceByName = fetchDeviceByName;
41
+ //# sourceMappingURL=devices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/utils/devices.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAwD;AACxD,qCAAqC;AACrC,kEAAyC;AACzC,qDAAiD;AAE1C,MAAM,eAAe,GAAG,KAAK,EAAE,MAAgB,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE;IAC3E,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAA,sBAAW,EAChB,GAAG,EAAE,CAAC,IAAA,oBAAQ,GAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAClE,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,OAAO,IAAA,sBAAW,EAChB,GAAG,EAAE,CAAC,IAAA,oBAAQ,GAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAChE,kBAAkB,CACnB,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B;AAEK,MAAM,YAAY,GAAG,KAAK,EAC/B,KAAK,GAAG,GAAG,EACX,IAAI,GAAG,CAAC,EACR,KAAK,GAAG,0BAA0B,EAClC,EAAE;IACF,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAW,EAC3B,GAAG,EAAE,CACH,IAAA,oBAAQ,GAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACtC,KAAK;QACL,IAAI;KACL,CAAC,EACJ,KAAK,CACN,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAfW,QAAA,YAAY,gBAevB;AAEK,MAAM,iBAAiB,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAE;IAC5D,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,aAAa,CAAC;IAExD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,GAAG,gBAAgB,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAW,EAC3B,GAAG,EAAE,CAAC,IAAA,oBAAQ,GAAE,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAC9C,kBAAkB,UAAU,EAAE,CAC/B,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAlBW,QAAA,iBAAiB,qBAkB5B"}