@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,226 +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 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', 'phystack-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
- // Revoke refresh token (opaque, revocable server-side).
191
- // Access tokens are JWTs and cannot be revoked via the revocation endpoint —
192
- // they expire naturally based on TTL.
193
- if (tokens.refresh_token) {
194
- await client.revoke(tokens.refresh_token, 'refresh_token');
195
- console.log('Refresh token revoked');
196
- }
197
- fs_1.default.unlinkSync(this.tokensPath);
198
- console.log('Local credentials removed');
199
- return;
200
- }
201
- throw new Error('No tokens found.');
202
- };
203
- this.startDeviceFlow = async () => {
204
- const issuer = await openid_client_1.Issuer.discover(this.phygridIdBaseUrl);
205
- const client = new issuer.Client({
206
- client_id: CLIENT_ID,
207
- token_endpoint_auth_method: 'none',
208
- });
209
- return await client.deviceAuthorization();
210
- };
211
- const { PHYGRID_ENV, OMBORI_ID_URL, PHYGRID_CLI_AUTH_FILE_PATH } = process.env;
212
- this.phygridIdBaseUrl = OMBORI_ID_URL || getPhygridIdBaseUrlByGridEnv(PHYGRID_ENV);
213
- this.tokensPath =
214
- PHYGRID_CLI_AUTH_FILE_PATH || getAuthFilePathBasedOnGridEnv(PHYGRID_ENV);
215
- this.developerTokenPath = path_1.default.join(CONFIG_DIR, 'developer-token.json');
216
- // Ensure config directory exists
217
- if (!fs_1.default.existsSync(CONFIG_DIR)) {
218
- fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
219
- }
220
- }
221
- validateToken(token) {
222
- return token && token.length >= 10;
223
- }
224
- }
225
- exports.default = AuthService;
226
- //# sourceMappingURL=device-grant-auth.service.js.map
@@ -1 +0,0 @@
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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"}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveApiUrl = resolveApiUrl;
4
- exports.getEnvironmentLabel = getEnvironmentLabel;
5
- const DEFAULT_API_URL = 'https://api.phystack.com';
6
- function resolveApiUrl() {
7
- const { PHYGRID_ENV } = process.env;
8
- if (PHYGRID_ENV) {
9
- const url = process.env[`${PHYGRID_ENV}_PHYGRID_API`];
10
- if (url)
11
- return url;
12
- }
13
- return process.env.PHYGRID_API || DEFAULT_API_URL;
14
- }
15
- function getEnvironmentLabel() {
16
- const env = process.env.PHYGRID_ENV;
17
- if (!env || env === 'PROD')
18
- return '';
19
- return env.toLowerCase();
20
- }
21
- //# sourceMappingURL=env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/services/env.ts"],"names":[],"mappings":";;AAEA,sCAOC;AAED,kDAIC;AAfD,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD,SAAgB,aAAa;IAC3B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;QACtD,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,eAAe,CAAC;AACpD,CAAC;AAED,SAAgB,mBAAmB;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACpC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC"}
@@ -1,200 +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.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
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/phyhub/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=phyhub.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phyhub.types.js","sourceRoot":"","sources":["../../../src/services/phyhub/phyhub.types.ts"],"names":[],"mappings":""}
@@ -1,162 +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.DeviceSimulator = void 0;
7
- /* eslint-disable import/prefer-default-export */
8
- const crypto_1 = __importDefault(require("crypto"));
9
- const chalk_1 = __importDefault(require("chalk"));
10
- const uuid_1 = require("uuid");
11
- const types_1 = require("./types");
12
- const twin_cache_1 = require("./twin-cache");
13
- const local_server_1 = require("./local-server");
14
- const message_router_1 = require("./message-router");
15
- const logger_1 = require("./logger");
16
- const simulator_config_1 = require("../utils/simulator-config");
17
- const utils_1 = require("../utils");
18
- /**
19
- * Generate a deterministic 24-char hex string (MongoDB ObjectID format)
20
- * from a human-readable name. Same input always produces same output.
21
- */
22
- function mockObjectId(name) {
23
- return crypto_1.default.createHash('sha256').update(name).digest('hex').slice(0, 24);
24
- }
25
- class DeviceSimulator {
26
- constructor(port = 55000, deviceDisplayName = 'Local Simulator') {
27
- this.router = null;
28
- this.deviceId = '';
29
- this.tenantId = '';
30
- this.port = port;
31
- this.deviceDisplayName = deviceDisplayName;
32
- this.twinCache = new twin_cache_1.TwinCache();
33
- this.localServer = new local_server_1.LocalServer(port);
34
- }
35
- async start() {
36
- // 1. Load or create device identity
37
- // Config storage uses this as directory name. Twins need a 24-char hex ID
38
- // to pass hub-client validation (e.g. signals zod schemas), so we derive
39
- // one deterministically via mockObjectId.
40
- const tenantLabel = 'local';
41
- const tenantObjectId = mockObjectId(tenantLabel);
42
- this.tenantId = tenantObjectId;
43
- const existingConfig = await (0, simulator_config_1.getDeviceConfig)(tenantLabel);
44
- let deviceTwinId;
45
- if (existingConfig) {
46
- this.deviceId = existingConfig.deviceId;
47
- deviceTwinId = existingConfig.deviceTwinId;
48
- }
49
- else {
50
- this.deviceId = (0, uuid_1.v4)();
51
- deviceTwinId = (0, uuid_1.v4)();
52
- await (0, simulator_config_1.saveDeviceConfig)(tenantLabel, {
53
- deviceId: this.deviceId,
54
- tenantId: this.tenantId,
55
- deviceTwinId,
56
- });
57
- }
58
- // 2. Create a local Device twin in cache
59
- const deviceTwin = {
60
- id: deviceTwinId,
61
- deviceId: this.deviceId,
62
- tenantId: this.tenantId,
63
- type: types_1.TwinTypeEnum.Device,
64
- properties: {
65
- desired: {
66
- displayName: this.deviceDisplayName,
67
- spaceId: tenantObjectId,
68
- env: 'development',
69
- deviceSerial: `SIM-${this.deviceId.slice(0, 8)}`,
70
- accessKey: 'simulator-local-key',
71
- },
72
- reported: {
73
- ip: [{ interface: 'lo', ipv4: '127.0.0.1', ipv6: '::1' }],
74
- os: { osVersion: 'Simulator' },
75
- env: { gridEnv: 'development' },
76
- },
77
- },
78
- };
79
- this.twinCache.addTwin(deviceTwin);
80
- // 3. Start local server
81
- await this.localServer.start();
82
- const io = this.localServer.getIO();
83
- this.localServer.on('instanceConnected', (event) => {
84
- const twin = this.twinCache.getTwin(event.twinId);
85
- const label = twin?.properties?.desired?.appName || 'unknown';
86
- logger_1.simulatorLog.success(`Instance connected: ${label} (${event.twinId}) — ${event.activeCount} active`);
87
- });
88
- this.localServer.on('instanceDisconnected', (event) => {
89
- const twin = this.twinCache.getTwin(event.twinId);
90
- const label = twin?.properties?.desired?.appName || 'unknown';
91
- logger_1.simulatorLog.warn(`Instance disconnected: ${label} (${event.twinId}) — ${event.activeCount} active`);
92
- });
93
- // 4. Create router (no upstream)
94
- this.router = new message_router_1.MessageRouter(this.twinCache, io);
95
- this.localServer.setRouter(this.router);
96
- // 5. Print banner
97
- this.printBanner();
98
- if (existingConfig) {
99
- logger_1.simulatorLog.dim(`Reusing device identity ${this.deviceId}`);
100
- }
101
- logger_1.simulatorLog.dim(`Apps connect to http://localhost:${this.port}`);
102
- }
103
- async stop() {
104
- logger_1.simulatorLog.dim('Shutting down simulator...');
105
- await this.localServer.stop();
106
- logger_1.simulatorLog.dim('Simulator stopped.');
107
- }
108
- async createTwinForApp(type, desiredProperties, reuseId) {
109
- const twin = {
110
- id: reuseId || (0, uuid_1.v4)(),
111
- deviceId: this.deviceId,
112
- tenantId: this.tenantId,
113
- type,
114
- properties: {
115
- desired: desiredProperties || {},
116
- reported: {},
117
- },
118
- };
119
- this.twinCache.addTwin(twin);
120
- return twin;
121
- }
122
- createPeripheralTwin(instanceId, name, hardwareId, desiredProperties) {
123
- const twin = {
124
- id: (0, uuid_1.v4)(),
125
- deviceId: this.deviceId,
126
- tenantId: this.tenantId,
127
- type: types_1.TwinTypeEnum.Peripheral,
128
- properties: {
129
- desired: { ...desiredProperties, instanceId, name, hardwareId },
130
- reported: {},
131
- },
132
- descriptors: { instanceId, name, hardwareId },
133
- };
134
- this.twinCache.addTwin(twin);
135
- return twin;
136
- }
137
- verifyTwinExists(twinId) {
138
- return this.twinCache.hasTwin(twinId);
139
- }
140
- getDeviceId() {
141
- return this.deviceId;
142
- }
143
- printBanner() {
144
- logger_1.simulatorLog.printBanner([
145
- '',
146
- chalk_1.default.hex('#00e676')(' ██▀▀▄ █ █ █ █ ▄▀▀▀ ▀▀█▀▀ ▄▀▀█ ▄▀▀▀ █ ▄▀'),
147
- chalk_1.default.hex('#00c853')(' █▄▄▀ █▄▄█ ▀█ ▀▀▄ █ █▄▄█ █ █▀▄ '),
148
- chalk_1.default.hex('#00a846')(' █ █ █ █ ▀▄▄▀ █ █ █ ▀▄▄▀ █ ▀▄'),
149
- chalk_1.default.dim(` Device Simulator v${(0, utils_1.getPackageVersion)()}`),
150
- chalk_1.default.dim('─'.repeat(50)),
151
- ` ${chalk_1.default.cyan('Mode:')} ${chalk_1.default.yellow('local')}`,
152
- ` ${chalk_1.default.cyan('Port:')} ${this.port}`,
153
- ` ${chalk_1.default.cyan('Device:')} ${this.deviceDisplayName}`,
154
- ` ${chalk_1.default.cyan('Device ID:')} ${chalk_1.default.dim(this.deviceId)} ${chalk_1.default.yellow('(local)')}`,
155
- ` ${chalk_1.default.cyan('Tenant:')} ${chalk_1.default.dim(this.tenantId)} ${chalk_1.default.yellow('(local)')}`,
156
- chalk_1.default.dim('─'.repeat(50)),
157
- '',
158
- ]);
159
- }
160
- }
161
- exports.DeviceSimulator = DeviceSimulator;
162
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/simulator/index.ts"],"names":[],"mappings":"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"}