@phystack/cli 4.4.29
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.
- package/LICENSE.md +19 -0
- package/README.md +24 -0
- package/bin/index.js +2 -0
- package/dist/commands/app/build-apps.js +66 -0
- package/dist/commands/app/build-apps.js.map +1 -0
- package/dist/commands/app/build-container-remote.js +171 -0
- package/dist/commands/app/build-container-remote.js.map +1 -0
- package/dist/commands/app/build-container.js +322 -0
- package/dist/commands/app/build-container.js.map +1 -0
- package/dist/commands/app/build.js +375 -0
- package/dist/commands/app/build.js.map +1 -0
- package/dist/commands/app/create.js +409 -0
- package/dist/commands/app/create.js.map +1 -0
- package/dist/commands/app/deploy.js +176 -0
- package/dist/commands/app/deploy.js.map +1 -0
- package/dist/commands/app/device-picker.js +150 -0
- package/dist/commands/app/device-picker.js.map +1 -0
- package/dist/commands/app/import.js +303 -0
- package/dist/commands/app/import.js.map +1 -0
- package/dist/commands/app/list.js +26 -0
- package/dist/commands/app/list.js.map +1 -0
- package/dist/commands/app/publish.js +327 -0
- package/dist/commands/app/publish.js.map +1 -0
- package/dist/commands/app/settings.js +129 -0
- package/dist/commands/app/settings.js.map +1 -0
- package/dist/commands/app/types.js +13 -0
- package/dist/commands/app/types.js.map +1 -0
- package/dist/commands/app/upload-description.js +139 -0
- package/dist/commands/app/upload-description.js.map +1 -0
- package/dist/commands/app/upload-settings.js +29 -0
- package/dist/commands/app/upload-settings.js.map +1 -0
- package/dist/commands/app/utils.js +86 -0
- package/dist/commands/app/utils.js.map +1 -0
- package/dist/commands/auth/login.js +111 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.js +19 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/descriptor/create.js +143 -0
- package/dist/commands/descriptor/create.js.map +1 -0
- package/dist/commands/descriptor/index.js +36 -0
- package/dist/commands/descriptor/index.js.map +1 -0
- package/dist/commands/descriptor/publish.js +163 -0
- package/dist/commands/descriptor/publish.js.map +1 -0
- package/dist/commands/descriptor/show.js +68 -0
- package/dist/commands/descriptor/show.js.map +1 -0
- package/dist/commands/dev/develop.js +175 -0
- package/dist/commands/dev/develop.js.map +1 -0
- package/dist/commands/dev/forward.js +118 -0
- package/dist/commands/dev/forward.js.map +1 -0
- package/dist/commands/dev/index.js +66 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/dev/list.js +96 -0
- package/dist/commands/dev/list.js.map +1 -0
- package/dist/commands/dev/screen-devtools.js +156 -0
- package/dist/commands/dev/screen-devtools.js.map +1 -0
- package/dist/commands/dev/select.js +118 -0
- package/dist/commands/dev/select.js.map +1 -0
- package/dist/commands/dev/shell.js +171 -0
- package/dist/commands/dev/shell.js.map +1 -0
- package/dist/commands/dev/vnc.js +75 -0
- package/dist/commands/dev/vnc.js.map +1 -0
- package/dist/commands/device/select.js +118 -0
- package/dist/commands/device/select.js.map +1 -0
- package/dist/commands/flash.js +1120 -0
- package/dist/commands/flash.js.map +1 -0
- package/dist/commands/inst/create.js +55 -0
- package/dist/commands/inst/create.js.map +1 -0
- package/dist/commands/inst/index.js +15 -0
- package/dist/commands/inst/index.js.map +1 -0
- package/dist/commands/inst/list.js +26 -0
- package/dist/commands/inst/list.js.map +1 -0
- package/dist/commands/legacydev/debug.js +11 -0
- package/dist/commands/legacydev/debug.js.map +1 -0
- package/dist/commands/legacydev/deploy.js +15 -0
- package/dist/commands/legacydev/deploy.js.map +1 -0
- package/dist/commands/legacydev/dumpTwin.js +27 -0
- package/dist/commands/legacydev/dumpTwin.js.map +1 -0
- package/dist/commands/legacydev/forward.js +104 -0
- package/dist/commands/legacydev/forward.js.map +1 -0
- package/dist/commands/legacydev/index.js +188 -0
- package/dist/commands/legacydev/index.js.map +1 -0
- package/dist/commands/legacydev/invoke.js +29 -0
- package/dist/commands/legacydev/invoke.js.map +1 -0
- package/dist/commands/legacydev/js.js +69 -0
- package/dist/commands/legacydev/js.js.map +1 -0
- package/dist/commands/legacydev/list.js +196 -0
- package/dist/commands/legacydev/list.js.map +1 -0
- package/dist/commands/legacydev/logs.js +60 -0
- package/dist/commands/legacydev/logs.js.map +1 -0
- package/dist/commands/legacydev/modules.js +50 -0
- package/dist/commands/legacydev/modules.js.map +1 -0
- package/dist/commands/legacydev/move.js +23 -0
- package/dist/commands/legacydev/move.js.map +1 -0
- package/dist/commands/legacydev/ota.js +88 -0
- package/dist/commands/legacydev/ota.js.map +1 -0
- package/dist/commands/legacydev/patchTwin.js +21 -0
- package/dist/commands/legacydev/patchTwin.js.map +1 -0
- package/dist/commands/legacydev/pin.js +23 -0
- package/dist/commands/legacydev/pin.js.map +1 -0
- package/dist/commands/legacydev/pub.js +25 -0
- package/dist/commands/legacydev/pub.js.map +1 -0
- package/dist/commands/legacydev/rdp.js +64 -0
- package/dist/commands/legacydev/rdp.js.map +1 -0
- package/dist/commands/legacydev/screen-devtools.js +142 -0
- package/dist/commands/legacydev/screen-devtools.js.map +1 -0
- package/dist/commands/legacydev/settingsShow.js +89 -0
- package/dist/commands/legacydev/settingsShow.js.map +1 -0
- package/dist/commands/legacydev/settingsUpdate.js +114 -0
- package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
- package/dist/commands/legacydev/shell.js +167 -0
- package/dist/commands/legacydev/shell.js.map +1 -0
- package/dist/commands/legacydev/showTwin.js +9 -0
- package/dist/commands/legacydev/showTwin.js.map +1 -0
- package/dist/commands/legacydev/statusLog.js +56 -0
- package/dist/commands/legacydev/statusLog.js.map +1 -0
- package/dist/commands/legacydev/sub.js +39 -0
- package/dist/commands/legacydev/sub.js.map +1 -0
- package/dist/commands/legacydev/vnc.js +61 -0
- package/dist/commands/legacydev/vnc.js.map +1 -0
- package/dist/commands/tenant/index.js +21 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/commands/tenant/list.js +14 -0
- package/dist/commands/tenant/list.js.map +1 -0
- package/dist/commands/tenant/select.js +87 -0
- package/dist/commands/tenant/select.js.map +1 -0
- package/dist/commands/vm/create.js +718 -0
- package/dist/commands/vm/create.js.map +1 -0
- package/dist/commands/vm/index.js +130 -0
- package/dist/commands/vm/index.js.map +1 -0
- package/dist/commands/vm/list.js +124 -0
- package/dist/commands/vm/list.js.map +1 -0
- package/dist/commands/vm/logs.js +66 -0
- package/dist/commands/vm/logs.js.map +1 -0
- package/dist/commands/vm/remove.js +180 -0
- package/dist/commands/vm/remove.js.map +1 -0
- package/dist/commands/vm/shell.js +400 -0
- package/dist/commands/vm/shell.js.map +1 -0
- package/dist/commands/vm/start.js +861 -0
- package/dist/commands/vm/start.js.map +1 -0
- package/dist/commands/vm/stop.js +232 -0
- package/dist/commands/vm/stop.js.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/services/admin-api/admin-api.types.js +3 -0
- package/dist/services/admin-api/admin-api.types.js.map +1 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
- package/dist/services/admin-api/devices-admin-api.service.js +213 -0
- package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/index.js +157 -0
- package/dist/services/admin-api/index.js.map +1 -0
- package/dist/services/admin-api/installations-admin-api.service.js +29 -0
- package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
- package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
- package/dist/services/auth/device-grant-auth.service.js +224 -0
- package/dist/services/auth/device-grant-auth.service.js.map +1 -0
- package/dist/services/phyhub/index.js +200 -0
- package/dist/services/phyhub/index.js.map +1 -0
- package/dist/services/phyhub/phyhub.types.js +3 -0
- package/dist/services/phyhub/phyhub.types.js.map +1 -0
- package/dist/utils/device-fetcher.js +92 -0
- package/dist/utils/device-fetcher.js.map +1 -0
- package/dist/utils/devices.js +41 -0
- package/dist/utils/devices.js.map +1 -0
- package/dist/utils/docker-credentials.js +546 -0
- package/dist/utils/docker-credentials.js.map +1 -0
- package/dist/utils/emulated-device.js +91 -0
- package/dist/utils/emulated-device.js.map +1 -0
- package/dist/utils/index.js +180 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/modules.js +36 -0
- package/dist/utils/modules.js.map +1 -0
- package/dist/utils/org-selector.js +108 -0
- package/dist/utils/org-selector.js.map +1 -0
- package/dist/utils/proxy.js +31 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/registry-credentials.js +113 -0
- package/dist/utils/registry-credentials.js.map +1 -0
- package/dist/utils/statuses.js +124 -0
- package/dist/utils/statuses.js.map +1 -0
- package/dist/utils/templates.js +189 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tenant-storage.js +88 -0
- package/dist/utils/tenant-storage.js.map +1 -0
- package/dist/utils/vm.js +434 -0
- package/dist/utils/vm.js.map +1 -0
- package/dist/utils/with-spinner.js +20 -0
- package/dist/utils/with-spinner.js.map +1 -0
- 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 @@
|
|
|
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"}
|