@phystack/phyctl-phyos 4.5.56-dev → 4.5.58-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.
- package/README.md +22 -35
- package/bin/index.js +22 -1
- package/package.json +10 -5
- package/dist/commands/local/index.js +0 -98
- package/dist/commands/local/index.js.map +0 -1
- package/dist/dialog/network/lan.dialog.js +0 -270
- package/dist/dialog/network/lan.dialog.js.map +0 -1
- package/dist/dialog/network/proxy.dialog.js +0 -90
- package/dist/dialog/network/proxy.dialog.js.map +0 -1
- package/dist/dialog/network/wifi.dialog.js +0 -202
- package/dist/dialog/network/wifi.dialog.js.map +0 -1
- package/dist/index.js +0 -618
- package/dist/index.js.map +0 -1
- package/dist/store/types/twin.types.js +0 -20
- package/dist/store/types/twin.types.js.map +0 -1
- package/dist/utilities/validators.js +0 -35
- package/dist/utilities/validators.js.map +0 -1
|
@@ -1,202 +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.setupWifi = void 0;
|
|
7
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
-
const child_process_1 = require("child_process");
|
|
10
|
-
const { get } = lodash_1.default;
|
|
11
|
-
async function getGatewayForInterface(iface) {
|
|
12
|
-
return new Promise((resolve) => {
|
|
13
|
-
(0, child_process_1.exec)(`ip route show default dev ${iface}`, (error, stdout) => {
|
|
14
|
-
if (error || !stdout) {
|
|
15
|
-
return resolve('N/A');
|
|
16
|
-
}
|
|
17
|
-
const match = stdout.match(/default via (\S+)/);
|
|
18
|
-
if (match) {
|
|
19
|
-
resolve(match[1]);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
resolve('N/A');
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
async function getDNSServersForInterface(iface) {
|
|
28
|
-
return new Promise((resolve) => {
|
|
29
|
-
(0, child_process_1.exec)('systemd-resolve --status', (error, stdout) => {
|
|
30
|
-
if (error || !stdout) {
|
|
31
|
-
return resolve([]);
|
|
32
|
-
}
|
|
33
|
-
const lines = stdout.split('\n');
|
|
34
|
-
let blockStarted = false;
|
|
35
|
-
let dnsServers = [];
|
|
36
|
-
for (let i = 0; i < lines.length; i++) {
|
|
37
|
-
const line = lines[i];
|
|
38
|
-
if (line.startsWith('Link') && line.includes(`(${iface})`)) {
|
|
39
|
-
blockStarted = true;
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
if (blockStarted) {
|
|
43
|
-
if (line.trim() === '' || line.startsWith('Link')) {
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
if (line.trim().startsWith('DNS Servers:')) {
|
|
47
|
-
let serversLine = line.replace('DNS Servers:', '').trim();
|
|
48
|
-
dnsServers = serversLine.split(/\s+/).map(entry => entry.split('#')[0]).filter(entry => entry);
|
|
49
|
-
}
|
|
50
|
-
else if (dnsServers.length && line.startsWith(' ')) {
|
|
51
|
-
let additional = line.trim().split(/\s+/).map(entry => entry.split('#')[0]).filter(entry => entry);
|
|
52
|
-
dnsServers = dnsServers.concat(additional);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
resolve(dnsServers);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
const setupWifi = async (phyClientInstance) => {
|
|
61
|
-
while (true) {
|
|
62
|
-
if (!phyClientInstance || !phyClientInstance.isConnected()) {
|
|
63
|
-
console.log('PhyDevice is not running or disconnected');
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
const deviceNetworksResponse = await phyClientInstance.getDeviceNetworks();
|
|
67
|
-
const updatedNetworks = deviceNetworksResponse.data;
|
|
68
|
-
const wifiInterfaces = get(updatedNetworks, 'wifiInterfaces', []);
|
|
69
|
-
const activeWifiConnections = get(updatedNetworks, 'wifiConnections', []);
|
|
70
|
-
const wifiNetworks = get(updatedNetworks, 'wifiNetworks', []);
|
|
71
|
-
const wifiInterfaceChoices = wifiInterfaces.map((iface) => {
|
|
72
|
-
const isConnected = activeWifiConnections.some((conn) => conn.iface === iface.iface);
|
|
73
|
-
const connectedTo = isConnected ?
|
|
74
|
-
activeWifiConnections.find((conn) => conn.iface === iface.iface)?.ssid : '';
|
|
75
|
-
return {
|
|
76
|
-
name: `${iface.iface} (${iface.mac})${isConnected ? ` - Connected to: ${connectedTo}` : ''}`,
|
|
77
|
-
value: iface
|
|
78
|
-
};
|
|
79
|
-
});
|
|
80
|
-
const interfaceAnswer = await inquirer_1.default.prompt([
|
|
81
|
-
{
|
|
82
|
-
type: 'list',
|
|
83
|
-
name: 'interface',
|
|
84
|
-
message: 'Select WiFi interface:',
|
|
85
|
-
choices: [...wifiInterfaceChoices, new inquirer_1.default.Separator(),
|
|
86
|
-
{ name: 'Go back', value: 'back' }, new inquirer_1.default.Separator()],
|
|
87
|
-
}
|
|
88
|
-
]);
|
|
89
|
-
if (interfaceAnswer.interface === 'back') {
|
|
90
|
-
break;
|
|
91
|
-
}
|
|
92
|
-
const selectedInterface = interfaceAnswer.interface;
|
|
93
|
-
const networkInterfaces = get(updatedNetworks, 'networkInterfaces', []);
|
|
94
|
-
const detailedInterface = networkInterfaces.find((ni) => ni.iface === selectedInterface.iface);
|
|
95
|
-
if (detailedInterface) {
|
|
96
|
-
const gateway = await getGatewayForInterface(selectedInterface.iface);
|
|
97
|
-
const dnsServers = await getDNSServersForInterface(selectedInterface.iface);
|
|
98
|
-
console.log(`Current configuration for ${selectedInterface.iface}:`);
|
|
99
|
-
console.log(`Mode: ${detailedInterface.dhcp === true ? 'DHCP' : 'Static'}`);
|
|
100
|
-
console.log(`IP Address: ${detailedInterface.ip4 || 'N/A'}`);
|
|
101
|
-
console.log(`Netmask: ${detailedInterface.ip4subnet || 'N/A'}`);
|
|
102
|
-
console.log(`Gateway: ${gateway}`);
|
|
103
|
-
console.log(`Default Route: ${detailedInterface.default ? 'Yes' : 'No'}`);
|
|
104
|
-
console.log(`DNS Server(s): ${dnsServers.length > 0 ? dnsServers.join(', ') : 'N/A'}`);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
console.log(`No detailed configuration found for ${selectedInterface.iface}.`);
|
|
108
|
-
}
|
|
109
|
-
const isInterfaceConnected = activeWifiConnections.some((conn) => conn.iface === selectedInterface.iface);
|
|
110
|
-
const actionChoices = [];
|
|
111
|
-
if (isInterfaceConnected) {
|
|
112
|
-
actionChoices.push({ name: 'Disconnect from current network', value: 'disconnect' }, { name: 'Connect to different network', value: 'connect' });
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
actionChoices.push({ name: 'Connect to network', value: 'connect' });
|
|
116
|
-
}
|
|
117
|
-
const { action } = await inquirer_1.default.prompt({
|
|
118
|
-
type: 'list',
|
|
119
|
-
name: 'action',
|
|
120
|
-
message: 'Choose an action:',
|
|
121
|
-
choices: [...actionChoices, new inquirer_1.default.Separator(),
|
|
122
|
-
{ name: 'Go back', value: 'back' }, new inquirer_1.default.Separator()],
|
|
123
|
-
});
|
|
124
|
-
if (action === 'back') {
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
if (action === 'disconnect') {
|
|
128
|
-
const { confirmDisconnect } = await inquirer_1.default.prompt({
|
|
129
|
-
type: 'confirm',
|
|
130
|
-
name: 'confirmDisconnect',
|
|
131
|
-
message: 'Are you sure you want to disconnect from the current WiFi network?',
|
|
132
|
-
default: false
|
|
133
|
-
});
|
|
134
|
-
if (confirmDisconnect) {
|
|
135
|
-
await new Promise((resolve) => {
|
|
136
|
-
phyClientInstance.emit('setWirelessNetwork', {
|
|
137
|
-
method: 'setWirelessNetwork',
|
|
138
|
-
data: {
|
|
139
|
-
isDisconnectCurrentNetwork: true,
|
|
140
|
-
iface: selectedInterface,
|
|
141
|
-
ssid: undefined,
|
|
142
|
-
key: undefined,
|
|
143
|
-
dns: null
|
|
144
|
-
}
|
|
145
|
-
}, () => {
|
|
146
|
-
console.log('WiFi disconnected');
|
|
147
|
-
resolve(null);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
continue;
|
|
154
|
-
}
|
|
155
|
-
const wifiNetworksChoices = wifiNetworks.map((network) => ({
|
|
156
|
-
name: network.ssid,
|
|
157
|
-
value: network.ssid,
|
|
158
|
-
}));
|
|
159
|
-
if (wifiNetworksChoices.length === 0) {
|
|
160
|
-
console.log('No available wifi networks');
|
|
161
|
-
break;
|
|
162
|
-
}
|
|
163
|
-
const networkAnswer = await inquirer_1.default.prompt([
|
|
164
|
-
{
|
|
165
|
-
type: 'list',
|
|
166
|
-
name: 'ssid',
|
|
167
|
-
message: 'Select WiFi network:',
|
|
168
|
-
choices: [...wifiNetworksChoices, new inquirer_1.default.Separator(),
|
|
169
|
-
{ name: 'Go back', value: 'back' }, new inquirer_1.default.Separator()],
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
type: 'password',
|
|
173
|
-
name: 'password',
|
|
174
|
-
message: (answers) => `Enter password for ${answers.ssid}:`,
|
|
175
|
-
mask: '*',
|
|
176
|
-
when: (answers) => answers.ssid && answers.ssid !== 'back',
|
|
177
|
-
}
|
|
178
|
-
]);
|
|
179
|
-
if (networkAnswer.ssid === 'back') {
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
console.log(`Setting up WiFi(${networkAnswer.ssid}) on ${selectedInterface.iface}...`);
|
|
183
|
-
await new Promise((resolve) => {
|
|
184
|
-
phyClientInstance.emit('setWirelessNetwork', {
|
|
185
|
-
method: 'setWirelessNetwork',
|
|
186
|
-
data: {
|
|
187
|
-
isDisconnectCurrentNetwork: false,
|
|
188
|
-
ssid: networkAnswer.ssid,
|
|
189
|
-
iface: selectedInterface,
|
|
190
|
-
key: networkAnswer.password,
|
|
191
|
-
}
|
|
192
|
-
}, () => {
|
|
193
|
-
console.log('WiFi configuration updated');
|
|
194
|
-
resolve();
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
198
|
-
break;
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
exports.setupWifi = setupWifi;
|
|
202
|
-
//# sourceMappingURL=wifi.dialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wifi.dialog.js","sourceRoot":"","sources":["../../../src/dialog/network/wifi.dialog.ts"],"names":[],"mappings":"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"}
|