@phystack/device-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 +13 -8
- package/dist/edge-hub.js +0 -1125
- package/dist/edge-hub.js.map +0 -1
- package/dist/http-proxy.js +0 -106
- package/dist/http-proxy.js.map +0 -1
- package/dist/index.js +0 -491
- package/dist/index.js.map +0 -1
- package/dist/methods/devdevice.js +0 -123
- package/dist/methods/devdevice.js.map +0 -1
- package/dist/methods/environment.js +0 -356
- package/dist/methods/environment.js.map +0 -1
- package/dist/methods/index.js +0 -24
- package/dist/methods/index.js.map +0 -1
- package/dist/methods/network/ca.js +0 -48
- package/dist/methods/network/ca.js.map +0 -1
- package/dist/methods/network/hostname.js +0 -56
- package/dist/methods/network/hostname.js.map +0 -1
- package/dist/methods/network/lan.js +0 -193
- package/dist/methods/network/lan.js.map +0 -1
- package/dist/methods/network/wifi.js +0 -299
- package/dist/methods/network/wifi.js.map +0 -1
- package/dist/methods/password.js +0 -87
- package/dist/methods/password.js.map +0 -1
- package/dist/methods/reboot.js +0 -22
- package/dist/methods/reboot.js.map +0 -1
- package/dist/methods/ssh.js +0 -148
- package/dist/methods/ssh.js.map +0 -1
- package/dist/services/scheduler.service.js +0 -335
- package/dist/services/scheduler.service.js.map +0 -1
- package/dist/store/types/network-interface.type.js +0 -3
- package/dist/store/types/network-interface.type.js.map +0 -1
- package/dist/time-sync.js +0 -123
- package/dist/time-sync.js.map +0 -1
- package/dist/types/command.types.js +0 -8
- package/dist/types/command.types.js.map +0 -1
- package/dist/types/container.types.js +0 -3
- package/dist/types/container.types.js.map +0 -1
- package/dist/types/event.types.js +0 -9
- package/dist/types/event.types.js.map +0 -1
- package/dist/types/job.types.js +0 -15
- package/dist/types/job.types.js.map +0 -1
- package/dist/types/twin.types.js +0 -34
- package/dist/types/twin.types.js.map +0 -1
- package/dist/utilities/audio-control.js +0 -919
- package/dist/utilities/audio-control.js.map +0 -1
- package/dist/utilities/docker-progress-tracker.js +0 -33
- package/dist/utilities/docker-progress-tracker.js.map +0 -1
- package/dist/utilities/docker.js +0 -1090
- package/dist/utilities/docker.js.map +0 -1
- package/dist/utilities/instances.js +0 -236
- package/dist/utilities/instances.js.map +0 -1
- package/dist/utilities/jobs.js +0 -103
- package/dist/utilities/jobs.js.map +0 -1
- package/dist/utilities/local-twins.js +0 -204
- package/dist/utilities/local-twins.js.map +0 -1
- package/dist/utilities/network-settings.js +0 -147
- package/dist/utilities/network-settings.js.map +0 -1
- package/dist/utilities/symlink.js +0 -47
- package/dist/utilities/symlink.js.map +0 -1
- package/dist/utilities/sysinfo.js +0 -128
- package/dist/utilities/sysinfo.js.map +0 -1
- package/dist/utilities/twin-manager.js +0 -108
- package/dist/utilities/twin-manager.js.map +0 -1
|
@@ -1,204 +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.localTwinManager = exports.LocalTwinManager = void 0;
|
|
7
|
-
const uuid_1 = require("uuid");
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const twin_types_1 = require("../types/twin.types");
|
|
10
|
-
const phy_logger_1 = require("@phystack/phy-logger");
|
|
11
|
-
const twin_manager_1 = require("./twin-manager");
|
|
12
|
-
const LOCAL_TWINS_PATH = '/data/settings/phyhub/local-twins.json';
|
|
13
|
-
const logger = new phy_logger_1.PhyLogger({
|
|
14
|
-
logToFile: false,
|
|
15
|
-
logToConsole: true,
|
|
16
|
-
includeTrace: true,
|
|
17
|
-
namespace: 'local-twins',
|
|
18
|
-
});
|
|
19
|
-
class LocalTwinManager {
|
|
20
|
-
static instance;
|
|
21
|
-
storage = { twins: {} };
|
|
22
|
-
constructor() {
|
|
23
|
-
this.loadStorage();
|
|
24
|
-
}
|
|
25
|
-
static getInstance() {
|
|
26
|
-
if (!LocalTwinManager.instance) {
|
|
27
|
-
LocalTwinManager.instance = new LocalTwinManager();
|
|
28
|
-
}
|
|
29
|
-
return LocalTwinManager.instance;
|
|
30
|
-
}
|
|
31
|
-
loadStorage() {
|
|
32
|
-
if (!fs_1.default.existsSync(LOCAL_TWINS_PATH)) {
|
|
33
|
-
this.saveStorage();
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const content = fs_1.default.readFileSync(LOCAL_TWINS_PATH, 'utf8');
|
|
37
|
-
this.storage = JSON.parse(content);
|
|
38
|
-
}
|
|
39
|
-
saveStorage() {
|
|
40
|
-
try {
|
|
41
|
-
const dir = LOCAL_TWINS_PATH.split('/').slice(0, -1).join('/');
|
|
42
|
-
if (!fs_1.default.existsSync(dir)) {
|
|
43
|
-
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
44
|
-
}
|
|
45
|
-
fs_1.default.writeFileSync(LOCAL_TWINS_PATH, JSON.stringify(this.storage, null, 2));
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
logger.error(`Failed to save local twins storage: ${error}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
async reportEdgeTwinProperties(twinId, properties) {
|
|
52
|
-
const twin = this.storage.twins[twinId];
|
|
53
|
-
if (!twin) {
|
|
54
|
-
logger.error(`reportEdgeTwinProperties(): Twin ${twinId} not found`);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
this.storage.twins[twinId] = {
|
|
58
|
-
...twin,
|
|
59
|
-
properties: {
|
|
60
|
-
desired: twin.properties.desired,
|
|
61
|
-
reported: {
|
|
62
|
-
...twin.properties.reported,
|
|
63
|
-
...properties
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
this.saveStorage();
|
|
68
|
-
}
|
|
69
|
-
async getAllLocalTwins() {
|
|
70
|
-
return this.storage.twins;
|
|
71
|
-
}
|
|
72
|
-
async getCachedTwins(twinId) {
|
|
73
|
-
if (twinId) {
|
|
74
|
-
return this.storage.twins[twinId];
|
|
75
|
-
}
|
|
76
|
-
const twinsByType = {};
|
|
77
|
-
Object.values(this.storage.twins).forEach(twin => {
|
|
78
|
-
if (!twinsByType[twin.type]) {
|
|
79
|
-
twinsByType[twin.type] = [];
|
|
80
|
-
}
|
|
81
|
-
twinsByType[twin.type].push(twin.id);
|
|
82
|
-
});
|
|
83
|
-
return twinsByType;
|
|
84
|
-
}
|
|
85
|
-
async cacheTwins(twins) {
|
|
86
|
-
twins.forEach(twin => {
|
|
87
|
-
this.storage.twins[twin.id] = twin;
|
|
88
|
-
});
|
|
89
|
-
this.saveStorage();
|
|
90
|
-
}
|
|
91
|
-
async removeCachedTwin(twinId) {
|
|
92
|
-
const ids = Array.isArray(twinId) ? twinId : [twinId];
|
|
93
|
-
ids.forEach(id => {
|
|
94
|
-
delete this.storage.twins[id];
|
|
95
|
-
});
|
|
96
|
-
this.saveStorage();
|
|
97
|
-
}
|
|
98
|
-
async createLocalTwin(config, deviceId, tenantId) {
|
|
99
|
-
if (config.properties?.desired?.containerCreateOptions) {
|
|
100
|
-
config.properties.desired.createOptions = config.properties.desired.containerCreateOptions;
|
|
101
|
-
delete config.properties.desired.containerCreateOptions;
|
|
102
|
-
}
|
|
103
|
-
const configImage = config.properties?.desired?.['docker-credentials']?.image || config.properties?.desired?.image;
|
|
104
|
-
if (configImage) {
|
|
105
|
-
const getBaseImageName = (image) => {
|
|
106
|
-
const nameWithoutTag = image.split(':')[0];
|
|
107
|
-
if (!nameWithoutTag.includes('/')) {
|
|
108
|
-
return nameWithoutTag;
|
|
109
|
-
}
|
|
110
|
-
const parts = nameWithoutTag.split('/');
|
|
111
|
-
if (parts.length === 2 && !parts[0].includes('.')) {
|
|
112
|
-
return nameWithoutTag;
|
|
113
|
-
}
|
|
114
|
-
if (parts.length === 2 && parts[0] === 'library') {
|
|
115
|
-
return parts[1];
|
|
116
|
-
}
|
|
117
|
-
return parts.slice(1).join('/');
|
|
118
|
-
};
|
|
119
|
-
const configBaseName = getBaseImageName(configImage);
|
|
120
|
-
console.log(`Looking for twin with base image name: ${configBaseName}`);
|
|
121
|
-
console.log(`Config image: ${configImage}`);
|
|
122
|
-
const twinManager = await (0, twin_manager_1.getTwinManagerInstance)();
|
|
123
|
-
const twinsByType = await twinManager.getCachedTwins();
|
|
124
|
-
console.log(`Twins by type: ${JSON.stringify(twinsByType, null, 2)}`);
|
|
125
|
-
const edgeTwinIds = twinsByType[twin_types_1.TwinTypeEnum.Edge] || [];
|
|
126
|
-
console.log(`Found ${edgeTwinIds.length} edge twins to check`);
|
|
127
|
-
const edgeTwins = await Promise.all(edgeTwinIds.map(async (id) => {
|
|
128
|
-
const twin = await twinManager.getCachedTwins(id);
|
|
129
|
-
console.log(`Retrieved twin ${id}: ${JSON.stringify(twin, null, 2)}`);
|
|
130
|
-
return twin;
|
|
131
|
-
}));
|
|
132
|
-
for (const twin of edgeTwins) {
|
|
133
|
-
if (!twin) {
|
|
134
|
-
console.log('Skipping undefined twin');
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
const twinImage = twin.properties?.desired?.image;
|
|
138
|
-
if (!twinImage) {
|
|
139
|
-
console.log(`Skipping twin ${twin.id}: no image`);
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
const twinBaseName = getBaseImageName(twinImage);
|
|
143
|
-
console.log(`Comparing twin ${twin.id} image: ${twinImage} (base: ${twinBaseName})`);
|
|
144
|
-
if (configBaseName === twinBaseName) {
|
|
145
|
-
console.log(`Found matching twin: ${twin.id}`);
|
|
146
|
-
const twinId = twin.id;
|
|
147
|
-
const updatedTwin = {
|
|
148
|
-
...twin,
|
|
149
|
-
properties: {
|
|
150
|
-
desired: config.properties?.desired,
|
|
151
|
-
reported: twin.properties.reported
|
|
152
|
-
},
|
|
153
|
-
updatedAt: new Date(),
|
|
154
|
-
lastStatusUpdatedAt: new Date(),
|
|
155
|
-
};
|
|
156
|
-
this.storage.twins[twinId] = updatedTwin;
|
|
157
|
-
this.saveStorage();
|
|
158
|
-
return twinId;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
console.log('No matching twin found after checking all twins');
|
|
162
|
-
}
|
|
163
|
-
const twinId = (0, uuid_1.v4)();
|
|
164
|
-
const twin = {
|
|
165
|
-
id: twinId,
|
|
166
|
-
type: twin_types_1.TwinTypeEnum.Edge,
|
|
167
|
-
deviceId: deviceId,
|
|
168
|
-
tenantId: tenantId,
|
|
169
|
-
version: 1,
|
|
170
|
-
status: twin_types_1.TwinStatusEnum.Starting,
|
|
171
|
-
notes: '',
|
|
172
|
-
createdAt: new Date(),
|
|
173
|
-
updatedAt: new Date(),
|
|
174
|
-
lastStatusUpdatedAt: new Date(),
|
|
175
|
-
properties: {
|
|
176
|
-
desired: config.properties?.desired || config,
|
|
177
|
-
reported: {
|
|
178
|
-
lastError: undefined
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
this.storage.twins[twinId] = twin;
|
|
183
|
-
this.saveStorage();
|
|
184
|
-
return twinId;
|
|
185
|
-
}
|
|
186
|
-
updateLocalTwin(twinId, twin) {
|
|
187
|
-
if (this.storage.twins[twinId]) {
|
|
188
|
-
this.storage.twins[twinId] = twin;
|
|
189
|
-
this.saveStorage();
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
isLocalTwin(twinId) {
|
|
193
|
-
return !!this.storage.twins[twinId];
|
|
194
|
-
}
|
|
195
|
-
listLocalTwins() {
|
|
196
|
-
return Object.values(this.storage.twins);
|
|
197
|
-
}
|
|
198
|
-
getLocalTwin(twinId) {
|
|
199
|
-
return this.storage.twins[twinId] || null;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
exports.LocalTwinManager = LocalTwinManager;
|
|
203
|
-
exports.localTwinManager = LocalTwinManager.getInstance();
|
|
204
|
-
//# sourceMappingURL=local-twins.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-twins.js","sourceRoot":"","sources":["../../src/utilities/local-twins.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,147 +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.ensureNetwork = exports.createNetwork = exports.removeNetwork = exports.networkExists = exports.applyNetworkSettings = void 0;
|
|
7
|
-
const dockerode_1 = __importDefault(require("dockerode"));
|
|
8
|
-
const docker = new dockerode_1.default();
|
|
9
|
-
const phy_logger_1 = require("@phystack/phy-logger");
|
|
10
|
-
const logger = new phy_logger_1.PhyLogger({
|
|
11
|
-
logToFile: false,
|
|
12
|
-
logToConsole: true,
|
|
13
|
-
includeTrace: true,
|
|
14
|
-
namespace: 'network-settings.ts',
|
|
15
|
-
});
|
|
16
|
-
const applyNetworkSettings = async () => {
|
|
17
|
-
logger.info('applyNetworkSettings(): applying network settings');
|
|
18
|
-
const { spawn } = require('child_process');
|
|
19
|
-
try {
|
|
20
|
-
await new Promise((resolve, reject) => {
|
|
21
|
-
const netplanApply = spawn('sudo', ['netplan', 'apply'], { stdio: 'pipe' });
|
|
22
|
-
let stdout = '';
|
|
23
|
-
let stderr = '';
|
|
24
|
-
netplanApply.stdout.on('data', (data) => {
|
|
25
|
-
stdout += data.toString();
|
|
26
|
-
});
|
|
27
|
-
netplanApply.stderr.on('data', (data) => {
|
|
28
|
-
stderr += data.toString();
|
|
29
|
-
});
|
|
30
|
-
netplanApply.on('close', (code) => {
|
|
31
|
-
if (code === 0) {
|
|
32
|
-
logger.info('applyNetworkSettings(): Netplan applied:', stdout);
|
|
33
|
-
resolve();
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
reject(new Error(`Netplan apply failed with code ${code}: ${stderr}`));
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
netplanApply.on('error', (error) => {
|
|
40
|
-
reject(error);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
await new Promise((resolve, reject) => {
|
|
44
|
-
const daemonReload = spawn('systemctl', ['daemon-reload'], { stdio: 'pipe' });
|
|
45
|
-
let stdout = '';
|
|
46
|
-
let stderr = '';
|
|
47
|
-
daemonReload.stdout.on('data', (data) => {
|
|
48
|
-
stdout += data.toString();
|
|
49
|
-
});
|
|
50
|
-
daemonReload.stderr.on('data', (data) => {
|
|
51
|
-
stderr += data.toString();
|
|
52
|
-
});
|
|
53
|
-
daemonReload.on('close', (code) => {
|
|
54
|
-
if (code === 0) {
|
|
55
|
-
logger.info('applyNetworkSettings(): Daemon reloaded:', stdout);
|
|
56
|
-
resolve();
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
reject(new Error(`Daemon reload failed with code ${code}: ${stderr}`));
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
daemonReload.on('error', (error) => {
|
|
63
|
-
reject(error);
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
logger.error('applyNetworkSettings(): Error:', error);
|
|
69
|
-
throw error;
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
exports.applyNetworkSettings = applyNetworkSettings;
|
|
73
|
-
const networkExists = async (networkName) => {
|
|
74
|
-
try {
|
|
75
|
-
logger.info(`networkExists(): Checking for network ${networkName}`);
|
|
76
|
-
const networks = await docker.listNetworks({ filters: { name: [networkName] } });
|
|
77
|
-
return networks.length > 0;
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
logger.error(`networkExists(): Error checking for network ${networkName}`, error);
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
exports.networkExists = networkExists;
|
|
85
|
-
const removeNetwork = async (networkName) => {
|
|
86
|
-
try {
|
|
87
|
-
const networks = await docker.listNetworks({ filters: { name: [networkName] } });
|
|
88
|
-
if (networks.length > 0) {
|
|
89
|
-
const network = docker.getNetwork(networks[0].Id);
|
|
90
|
-
await network.remove();
|
|
91
|
-
logger.info(`removeNetwork(): Network ${networkName} removed`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
const isExpectedError = networkName === 'azure-iot-edge' &&
|
|
96
|
-
error.statusCode === 404 &&
|
|
97
|
-
(error.message?.includes('no such network') || error.message?.includes('unknown network'));
|
|
98
|
-
if (!isExpectedError) {
|
|
99
|
-
logger.error(`removeNetwork(): Failed to remove network ${networkName}`, error);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
exports.removeNetwork = removeNetwork;
|
|
104
|
-
const createNetwork = async (networkName, subnet) => {
|
|
105
|
-
logger.info(`createNetwork(): Creating network ${networkName} with subnet ${subnet}`);
|
|
106
|
-
try {
|
|
107
|
-
await docker.createNetwork({
|
|
108
|
-
Name: networkName,
|
|
109
|
-
IPAM: {
|
|
110
|
-
Driver: 'default',
|
|
111
|
-
Config: [
|
|
112
|
-
{
|
|
113
|
-
Subnet: subnet,
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
|
-
});
|
|
118
|
-
logger.info(`createNetwork(): Network ${networkName} created with subnet ${subnet}`);
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
const isNetworkExistsError = error.statusCode === 409 &&
|
|
122
|
-
error.message?.includes(`network with name ${networkName} already exists`);
|
|
123
|
-
if (!isNetworkExistsError) {
|
|
124
|
-
logger.error(`createNetwork(): Failed to create network ${networkName}`, error);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
exports.createNetwork = createNetwork;
|
|
129
|
-
const ensureNetwork = async () => {
|
|
130
|
-
logger.info(`ensureNetwork(): Ensuring network`);
|
|
131
|
-
const oldNetworkName = 'azure-iot-edge';
|
|
132
|
-
const newNetworkName = 'phyos-edge-net';
|
|
133
|
-
const subnet = '172.26.128.0/24';
|
|
134
|
-
const oldExists = await (0, exports.networkExists)(oldNetworkName);
|
|
135
|
-
if (oldExists) {
|
|
136
|
-
await (0, exports.removeNetwork)(oldNetworkName);
|
|
137
|
-
}
|
|
138
|
-
const newExists = await (0, exports.networkExists)(newNetworkName);
|
|
139
|
-
if (!newExists) {
|
|
140
|
-
await (0, exports.createNetwork)(newNetworkName, subnet);
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
logger.info(`ensureNetwork(): Network ${newNetworkName} already exists`);
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
exports.ensureNetwork = ensureNetwork;
|
|
147
|
-
//# sourceMappingURL=network-settings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network-settings.js","sourceRoot":"","sources":["../../src/utilities/network-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +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.ensureEnvSymlink = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const phy_logger_1 = require("@phystack/phy-logger");
|
|
9
|
-
const logger = new phy_logger_1.PhyLogger({
|
|
10
|
-
logToFile: false,
|
|
11
|
-
logToConsole: true,
|
|
12
|
-
includeTrace: true,
|
|
13
|
-
namespace: 'symlink-utility',
|
|
14
|
-
});
|
|
15
|
-
const ensureEnvSymlink = () => {
|
|
16
|
-
const targetPath = '/data/settings/phyos.env';
|
|
17
|
-
const symlinkPath = '/etc/phyos.env';
|
|
18
|
-
let symlinkFixed = false;
|
|
19
|
-
try {
|
|
20
|
-
fs_1.default.mkdirSync('/data/settings', { recursive: true });
|
|
21
|
-
if (!fs_1.default.existsSync(targetPath)) {
|
|
22
|
-
fs_1.default.writeFileSync(targetPath, 'PROD');
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
const currentTarget = fs_1.default.readlinkSync(symlinkPath);
|
|
26
|
-
if (currentTarget !== targetPath) {
|
|
27
|
-
fs_1.default.unlinkSync(symlinkPath);
|
|
28
|
-
fs_1.default.symlinkSync(targetPath, symlinkPath);
|
|
29
|
-
symlinkFixed = true;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
if (fs_1.default.existsSync(symlinkPath)) {
|
|
34
|
-
fs_1.default.unlinkSync(symlinkPath);
|
|
35
|
-
}
|
|
36
|
-
fs_1.default.symlinkSync(targetPath, symlinkPath);
|
|
37
|
-
symlinkFixed = true;
|
|
38
|
-
}
|
|
39
|
-
return symlinkFixed;
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
logger.error('ensureEnvSymlink(): Failed to setup symlink:', error);
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
exports.ensureEnvSymlink = ensureEnvSymlink;
|
|
47
|
-
//# sourceMappingURL=symlink.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"symlink.js","sourceRoot":"","sources":["../../src/utilities/symlink.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AAEpB,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC;IAC3B,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,iBAAiB;CAC7B,CAAC,CAAC;AAEI,MAAM,gBAAgB,GAAG,GAAY,EAAE;IAC5C,MAAM,UAAU,GAAG,0BAA0B,CAAC;IAC9C,MAAM,WAAW,GAAG,gBAAgB,CAAC;IACrC,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC;QAEH,YAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAGpD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAGD,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,YAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;gBACjC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC3B,YAAE,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;gBACxC,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7B,CAAC;YACD,YAAE,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YACxC,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AApCW,QAAA,gBAAgB,oBAoC3B"}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.getDeviceNetworks = getDeviceNetworks;
|
|
40
|
-
const systeminformation_1 = __importDefault(require("systeminformation"));
|
|
41
|
-
const child_process_1 = require("child_process");
|
|
42
|
-
const util_1 = require("util");
|
|
43
|
-
const fs = __importStar(require("fs"));
|
|
44
|
-
const yaml = __importStar(require("js-yaml"));
|
|
45
|
-
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
46
|
-
async function isDhcpEnabled(iface) {
|
|
47
|
-
try {
|
|
48
|
-
try {
|
|
49
|
-
if (fs.existsSync('/etc/netplan/04-lan.yaml')) {
|
|
50
|
-
const lanConfig = yaml.load(fs.readFileSync('/etc/netplan/04-lan.yaml', 'utf8'));
|
|
51
|
-
if (lanConfig?.network?.ethernets?.[iface]) {
|
|
52
|
-
const ifaceConfig = lanConfig.network.ethernets[iface];
|
|
53
|
-
if (ifaceConfig.dhcp4 === true) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
else if (ifaceConfig.dhcp4 === false) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
console.error(`Error reading LAN netplan config for ${iface}:`, error);
|
|
64
|
-
}
|
|
65
|
-
try {
|
|
66
|
-
if (fs.existsSync('/etc/netplan/03-wifi.yaml')) {
|
|
67
|
-
const wifiConfig = yaml.load(fs.readFileSync('/etc/netplan/03-wifi.yaml', 'utf8'));
|
|
68
|
-
if (wifiConfig?.network?.wifis?.[iface]) {
|
|
69
|
-
const ifaceConfig = wifiConfig.network.wifis[iface];
|
|
70
|
-
if (ifaceConfig.dhcp4 === true) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
else if (ifaceConfig.dhcp4 === false) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
console.error(`Error reading WiFi netplan config for ${iface}:`, error);
|
|
81
|
-
}
|
|
82
|
-
const { stdout: nmOutput } = await execAsync(`nmcli device show ${iface} 2>/dev/null | grep "DHCP4.OPTION" || echo ""`);
|
|
83
|
-
if (nmOutput.includes('DHCP4.OPTION')) {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
const { stdout: dhclientOutput } = await execAsync(`ps aux | grep "dhclient.*${iface}" | grep -v grep || echo ""`);
|
|
87
|
-
if (dhclientOutput) {
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
const { stdout: networkdOutput } = await execAsync(`networkctl status ${iface} 2>/dev/null | grep "DHCP" || echo ""`);
|
|
91
|
-
if (networkdOutput.includes('DHCP: yes')) {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
console.error(`Error checking DHCP for ${iface}:`, error);
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
async function getDeviceNetworks() {
|
|
102
|
-
const valueObject = {
|
|
103
|
-
wifiInterfaces: '*',
|
|
104
|
-
wifiNetworks: '*',
|
|
105
|
-
wifiConnections: '*',
|
|
106
|
-
};
|
|
107
|
-
const info = await systeminformation_1.default.get(valueObject);
|
|
108
|
-
let netIfaces = await systeminformation_1.default.networkInterfaces();
|
|
109
|
-
if (!Array.isArray(netIfaces)) {
|
|
110
|
-
netIfaces = [netIfaces];
|
|
111
|
-
}
|
|
112
|
-
netIfaces = await Promise.all(netIfaces.map(async (iface) => {
|
|
113
|
-
const dhcp = await isDhcpEnabled(iface.iface);
|
|
114
|
-
return {
|
|
115
|
-
...iface,
|
|
116
|
-
dhcp,
|
|
117
|
-
type: iface.type ||
|
|
118
|
-
(iface.ifaceName &&
|
|
119
|
-
(iface.ifaceName.startsWith('en') || iface.ifaceName.startsWith('eth'))
|
|
120
|
-
? 'wired'
|
|
121
|
-
: 'unknown')
|
|
122
|
-
};
|
|
123
|
-
}));
|
|
124
|
-
info.networkInterfaces = netIfaces;
|
|
125
|
-
return info;
|
|
126
|
-
}
|
|
127
|
-
exports.default = getDeviceNetworks;
|
|
128
|
-
//# sourceMappingURL=sysinfo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sysinfo.js","sourceRoot":"","sources":["../../src/utilities/sysinfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTwinManagerInstance = exports.TwinManager = void 0;
|
|
4
|
-
const local_twins_1 = require("./local-twins");
|
|
5
|
-
const phy_logger_1 = require("@phystack/phy-logger");
|
|
6
|
-
const logger = new phy_logger_1.PhyLogger({
|
|
7
|
-
logToFile: false,
|
|
8
|
-
logToConsole: true,
|
|
9
|
-
includeTrace: true,
|
|
10
|
-
namespace: 'twin-manager',
|
|
11
|
-
});
|
|
12
|
-
class TwinManager {
|
|
13
|
-
static instance;
|
|
14
|
-
hubDevice;
|
|
15
|
-
constructor() { }
|
|
16
|
-
static async getInstance() {
|
|
17
|
-
if (!TwinManager.instance) {
|
|
18
|
-
TwinManager.instance = new TwinManager();
|
|
19
|
-
}
|
|
20
|
-
return TwinManager.instance;
|
|
21
|
-
}
|
|
22
|
-
setHubDevice(hubDevice) {
|
|
23
|
-
this.hubDevice = hubDevice;
|
|
24
|
-
}
|
|
25
|
-
async reportEdgeTwinProperties(twinId, properties) {
|
|
26
|
-
if (local_twins_1.localTwinManager.isLocalTwin(twinId)) {
|
|
27
|
-
return local_twins_1.localTwinManager.reportEdgeTwinProperties(twinId, properties);
|
|
28
|
-
}
|
|
29
|
-
return this.hubDevice.reportEdgeTwinProperties(twinId, properties);
|
|
30
|
-
}
|
|
31
|
-
async cacheHubTwin(twin) {
|
|
32
|
-
if (!this.hubDevice)
|
|
33
|
-
return;
|
|
34
|
-
await this.hubDevice.cacheTwins([twin]);
|
|
35
|
-
}
|
|
36
|
-
async getAllLocalTwins() {
|
|
37
|
-
return local_twins_1.localTwinManager.getAllLocalTwins();
|
|
38
|
-
}
|
|
39
|
-
async getLocalTwins() {
|
|
40
|
-
return local_twins_1.localTwinManager.getCachedTwins();
|
|
41
|
-
}
|
|
42
|
-
async getCachedTwins(twinId) {
|
|
43
|
-
const hubDeviceTwin = this.hubDevice ? await this.hubDevice.getCachedTwins(twinId) : {};
|
|
44
|
-
if (twinId) {
|
|
45
|
-
const localTwin = await local_twins_1.localTwinManager.getCachedTwins(twinId);
|
|
46
|
-
if (localTwin) {
|
|
47
|
-
if (hubDeviceTwin) {
|
|
48
|
-
return {
|
|
49
|
-
...localTwin,
|
|
50
|
-
properties: {
|
|
51
|
-
desired: {
|
|
52
|
-
...hubDeviceTwin.properties.desired,
|
|
53
|
-
image: localTwin.properties.desired.image,
|
|
54
|
-
createOptions: localTwin.properties.desired.createOptions,
|
|
55
|
-
},
|
|
56
|
-
reported: {
|
|
57
|
-
...hubDeviceTwin.properties.reported,
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
return localTwin;
|
|
63
|
-
}
|
|
64
|
-
return hubDeviceTwin;
|
|
65
|
-
}
|
|
66
|
-
const [hubTwins = {}, localTwins = {}] = await Promise.all([
|
|
67
|
-
this.hubDevice ? this.hubDevice.getCachedTwins() : {},
|
|
68
|
-
local_twins_1.localTwinManager.getCachedTwins(),
|
|
69
|
-
]);
|
|
70
|
-
const mergedTwins = {};
|
|
71
|
-
Object.entries(hubTwins).forEach(([type, ids]) => {
|
|
72
|
-
mergedTwins[type] = [...ids];
|
|
73
|
-
});
|
|
74
|
-
Object.entries(localTwins).forEach(([type, localIds]) => {
|
|
75
|
-
if (!mergedTwins[type]) {
|
|
76
|
-
mergedTwins[type] = [];
|
|
77
|
-
}
|
|
78
|
-
localIds.forEach((localId) => {
|
|
79
|
-
if (!mergedTwins[type].includes(localId)) {
|
|
80
|
-
mergedTwins[type].unshift(localId);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
mergedTwins[type] = mergedTwins[type].filter(id => id !== localId);
|
|
84
|
-
mergedTwins[type].unshift(localId);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
return mergedTwins;
|
|
89
|
-
}
|
|
90
|
-
getLocalTwinManager() {
|
|
91
|
-
return local_twins_1.localTwinManager;
|
|
92
|
-
}
|
|
93
|
-
getHubDevice() {
|
|
94
|
-
return this.hubDevice;
|
|
95
|
-
}
|
|
96
|
-
setScheduler(scheduler) {
|
|
97
|
-
return this.hubDevice.setScheduler(scheduler);
|
|
98
|
-
}
|
|
99
|
-
async addTwin(twin) {
|
|
100
|
-
return local_twins_1.localTwinManager.cacheTwins([twin]);
|
|
101
|
-
}
|
|
102
|
-
async removeTwin(twinId) {
|
|
103
|
-
return local_twins_1.localTwinManager.removeCachedTwin(twinId);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
exports.TwinManager = TwinManager;
|
|
107
|
-
exports.getTwinManagerInstance = TwinManager.getInstance;
|
|
108
|
-
//# sourceMappingURL=twin-manager.js.map
|