@phystack/hub-device 4.4.45 → 4.5.2-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/dist/sysinfo/node.d.ts.map +1 -1
- package/dist/sysinfo/node.js +385 -4
- package/dist/sysinfo/node.js.map +1 -1
- package/dist/types/twin.types.d.ts +24 -0
- package/dist/types/twin.types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/sysinfo/node.ts +520 -5
- package/src/types/twin.types.ts +27 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/sysinfo/node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/sysinfo/node.ts"],"names":[],"mappings":"AAigBA,wBAAsB,oBAAoB,iBAmEzC;AAaD,eAAe,oBAAoB,CAAC"}
|
package/dist/sysinfo/node.js
CHANGED
|
@@ -5,6 +5,384 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getSystemInformation = getSystemInformation;
|
|
7
7
|
const systeminformation_1 = __importDefault(require("systeminformation"));
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const PULSEAUDIO_COMMANDS = {
|
|
10
|
+
INFO: 'pactl info',
|
|
11
|
+
KILL: 'pulseaudio -k 2>/dev/null || true',
|
|
12
|
+
START_DAEMON: 'pulseaudio --daemonize --exit-idle-time=-1 --system=false',
|
|
13
|
+
WAIT: 'sleep 1',
|
|
14
|
+
LIST_MODULES: 'pactl list modules short',
|
|
15
|
+
LOAD_ALSA_MODULE: 'pactl load-module module-alsa-card',
|
|
16
|
+
LIST_SINKS: 'pactl list sinks',
|
|
17
|
+
LIST_SOURCES: 'pactl list sources',
|
|
18
|
+
LOAD_ALSA_SINK: (hwDevice, sinkName, description) => `pactl load-module module-alsa-sink device=${hwDevice} sink_name=${sinkName} sink_properties="device.description=${description}"`,
|
|
19
|
+
LOAD_ALSA_SOURCE: (hwDevice, sourceName, description) => `pactl load-module module-alsa-source device=${hwDevice} source_name=${sourceName} source_properties="device.description=${description}"`,
|
|
20
|
+
};
|
|
21
|
+
const PULSEAUDIO_TIMEOUTS = {
|
|
22
|
+
INFO_CHECK: 2000,
|
|
23
|
+
KILL: 2000,
|
|
24
|
+
START: 5000,
|
|
25
|
+
LIST_MODULES: 2000,
|
|
26
|
+
LOAD_MODULE: 3000,
|
|
27
|
+
LIST_DEVICES: 5000,
|
|
28
|
+
};
|
|
29
|
+
function buildAudioDescription(name, formFactor, bus, vendor, isInput) {
|
|
30
|
+
const parts = [name];
|
|
31
|
+
if (formFactor === 'internal') {
|
|
32
|
+
parts.push(`(Built-in ${isInput ? 'Microphone' : 'Speaker'})`);
|
|
33
|
+
}
|
|
34
|
+
else if (formFactor) {
|
|
35
|
+
parts.push(`(${formFactor})`);
|
|
36
|
+
}
|
|
37
|
+
if (bus)
|
|
38
|
+
parts.push(`via ${bus.toUpperCase()}`);
|
|
39
|
+
if (vendor && !name.includes(vendor))
|
|
40
|
+
parts.push(`- ${vendor}`);
|
|
41
|
+
return parts.join(' ');
|
|
42
|
+
}
|
|
43
|
+
function parseAudioDevice(block, isInput) {
|
|
44
|
+
const lines = block.split('\n');
|
|
45
|
+
const device = {};
|
|
46
|
+
const ports = [];
|
|
47
|
+
let inPortsSection = false;
|
|
48
|
+
for (let i = 0; i < lines.length; i++) {
|
|
49
|
+
const line = lines[i];
|
|
50
|
+
const trimmed = line.trim();
|
|
51
|
+
if (trimmed.startsWith('Name:')) {
|
|
52
|
+
device.identifier = trimmed.split('Name:')[1].trim();
|
|
53
|
+
}
|
|
54
|
+
else if (trimmed.startsWith('Description:')) {
|
|
55
|
+
device.displayName = trimmed.split('Description:')[1].trim();
|
|
56
|
+
}
|
|
57
|
+
else if (trimmed.startsWith('Volume:')) {
|
|
58
|
+
const match = trimmed.match(/(\d+)%/);
|
|
59
|
+
if (match)
|
|
60
|
+
device.volume = parseInt(match[1], 10);
|
|
61
|
+
}
|
|
62
|
+
else if (trimmed.startsWith('Mute:')) {
|
|
63
|
+
device.muted = trimmed.toLowerCase().includes('yes');
|
|
64
|
+
}
|
|
65
|
+
else if (trimmed.startsWith('Active Port:')) {
|
|
66
|
+
device.activePort = trimmed.split('Active Port:')[1].trim();
|
|
67
|
+
console.log(`[Audio] Found active port: ${device.activePort}`);
|
|
68
|
+
}
|
|
69
|
+
else if (trimmed.startsWith('Ports:')) {
|
|
70
|
+
inPortsSection = true;
|
|
71
|
+
console.log(`[Audio] Entering ports section for device`);
|
|
72
|
+
}
|
|
73
|
+
else if (inPortsSection) {
|
|
74
|
+
if (trimmed.match(/^[A-Z][a-z]+:/) && !line.match(/^\s/)) {
|
|
75
|
+
inPortsSection = false;
|
|
76
|
+
console.log(`[Audio] Exiting ports section, found ${ports.length} ports`);
|
|
77
|
+
}
|
|
78
|
+
else if (trimmed.length > 0 && line.match(/^\s+\S/)) {
|
|
79
|
+
const portMatch = trimmed.match(/^([^:]+):\s*(.+?)(?:\s*\((.+)\))?$/);
|
|
80
|
+
if (portMatch) {
|
|
81
|
+
const portName = portMatch[1].trim();
|
|
82
|
+
const portDescription = portMatch[2].trim();
|
|
83
|
+
const portDetails = portMatch[3];
|
|
84
|
+
const port = {
|
|
85
|
+
name: portName,
|
|
86
|
+
description: portDescription,
|
|
87
|
+
};
|
|
88
|
+
if (portDetails) {
|
|
89
|
+
const typeMatch = portDetails.match(/type:\s*([^,]+)/);
|
|
90
|
+
const priorityMatch = portDetails.match(/priority:\s*(\d+)/);
|
|
91
|
+
const availableMatch = portDetails.match(/available|availability unknown/);
|
|
92
|
+
if (typeMatch)
|
|
93
|
+
port.type = typeMatch[1].trim();
|
|
94
|
+
if (priorityMatch)
|
|
95
|
+
port.priority = parseInt(priorityMatch[1], 10);
|
|
96
|
+
if (availableMatch)
|
|
97
|
+
port.available = availableMatch[0] === 'available';
|
|
98
|
+
}
|
|
99
|
+
console.log(`[Audio] Parsed port: ${portName} - ${portDescription}`);
|
|
100
|
+
ports.push(port);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (trimmed.includes('device.form_factor =')) {
|
|
105
|
+
const match = trimmed.match(/"([^"]+)"/);
|
|
106
|
+
if (match)
|
|
107
|
+
device.formFactor = match[1];
|
|
108
|
+
}
|
|
109
|
+
else if (trimmed.includes('device.bus =')) {
|
|
110
|
+
const match = trimmed.match(/"([^"]+)"/);
|
|
111
|
+
if (match)
|
|
112
|
+
device.bus = match[1];
|
|
113
|
+
}
|
|
114
|
+
else if (trimmed.includes('device.vendor.name =')) {
|
|
115
|
+
const match = trimmed.match(/"([^"]+)"/);
|
|
116
|
+
if (match && !device.description)
|
|
117
|
+
device.description = match[1];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (isInput && device.identifier?.includes('.monitor')) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
if (!device.identifier)
|
|
124
|
+
return null;
|
|
125
|
+
if (ports.length > 0) {
|
|
126
|
+
device.availablePorts = ports;
|
|
127
|
+
console.log(`[Audio] Device ${device.identifier} has ${ports.length} ports, active: ${device.activePort}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log(`[Audio] Device ${device.identifier} has NO ports detected`);
|
|
131
|
+
}
|
|
132
|
+
if (device.displayName) {
|
|
133
|
+
device.description = buildAudioDescription(device.displayName, device.formFactor || '', device.bus || '', device.description || '', isInput);
|
|
134
|
+
}
|
|
135
|
+
return device;
|
|
136
|
+
}
|
|
137
|
+
function startPulseAudio() {
|
|
138
|
+
try {
|
|
139
|
+
(0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.INFO, {
|
|
140
|
+
encoding: 'utf-8',
|
|
141
|
+
timeout: PULSEAUDIO_TIMEOUTS.INFO_CHECK,
|
|
142
|
+
stdio: 'pipe',
|
|
143
|
+
});
|
|
144
|
+
console.log('PulseAudio is running and accessible');
|
|
145
|
+
loadAlsaDevicesIntoPulseAudio();
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
150
|
+
console.log('PulseAudio not accessible:', errorMsg);
|
|
151
|
+
console.log('Attempting to start PulseAudio...');
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
(0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.KILL, {
|
|
155
|
+
timeout: PULSEAUDIO_TIMEOUTS.KILL,
|
|
156
|
+
stdio: 'pipe',
|
|
157
|
+
});
|
|
158
|
+
(0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.WAIT, { stdio: 'pipe' });
|
|
159
|
+
(0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.START_DAEMON, {
|
|
160
|
+
timeout: PULSEAUDIO_TIMEOUTS.START,
|
|
161
|
+
stdio: 'pipe',
|
|
162
|
+
});
|
|
163
|
+
(0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.WAIT, { stdio: 'pipe' });
|
|
164
|
+
(0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.INFO, {
|
|
165
|
+
timeout: PULSEAUDIO_TIMEOUTS.INFO_CHECK,
|
|
166
|
+
stdio: 'pipe',
|
|
167
|
+
});
|
|
168
|
+
console.log('✓ PulseAudio started successfully');
|
|
169
|
+
loadAlsaDevicesIntoPulseAudio();
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.error('✗ Failed to start PulseAudio:', error instanceof Error ? error.message : String(error));
|
|
174
|
+
console.error(' Hint: Make sure no other PulseAudio instances are running as different users');
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function parseAlsaDevices(aplayOutput) {
|
|
179
|
+
const devices = [];
|
|
180
|
+
const regex = /card (\d+): ([^,]+), device (\d+): ([^\[]+)\[([^\]]+)\]/g;
|
|
181
|
+
let match;
|
|
182
|
+
while ((match = regex.exec(aplayOutput)) !== null) {
|
|
183
|
+
const card = parseInt(match[1], 10);
|
|
184
|
+
const device = parseInt(match[3], 10);
|
|
185
|
+
const name = match[5].trim();
|
|
186
|
+
devices.push({
|
|
187
|
+
card,
|
|
188
|
+
device,
|
|
189
|
+
name,
|
|
190
|
+
hwString: `hw:${card},${device}`,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return devices;
|
|
194
|
+
}
|
|
195
|
+
function checkExistingSink(hwString, isInput) {
|
|
196
|
+
try {
|
|
197
|
+
const command = isInput ? PULSEAUDIO_COMMANDS.LIST_SOURCES : PULSEAUDIO_COMMANDS.LIST_SINKS;
|
|
198
|
+
const output = (0, child_process_1.execSync)(command, {
|
|
199
|
+
encoding: 'utf-8',
|
|
200
|
+
timeout: 3000,
|
|
201
|
+
});
|
|
202
|
+
const [card, device] = hwString.replace('hw:', '').split(',');
|
|
203
|
+
const devicePattern = new RegExp(`alsa\\.device\\s*=\\s*"${device}"`, 'i');
|
|
204
|
+
const cardPattern = new RegExp(`alsa\\.card\\s*=\\s*"${card}"`, 'i');
|
|
205
|
+
const blocks = output.split(/^(Sink|Source) #/m);
|
|
206
|
+
for (const block of blocks) {
|
|
207
|
+
if (cardPattern.test(block) && devicePattern.test(block)) {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function createPulseAudioSink(alsaDevice, isInput) {
|
|
218
|
+
try {
|
|
219
|
+
const sinkName = isInput
|
|
220
|
+
? `alsa_input_${alsaDevice.card}_${alsaDevice.device}`
|
|
221
|
+
: `alsa_output_${alsaDevice.card}_${alsaDevice.device}`;
|
|
222
|
+
const safeDescription = `${alsaDevice.name}_${alsaDevice.hwString}`.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
223
|
+
const command = isInput
|
|
224
|
+
? PULSEAUDIO_COMMANDS.LOAD_ALSA_SOURCE(alsaDevice.hwString, sinkName, safeDescription)
|
|
225
|
+
: PULSEAUDIO_COMMANDS.LOAD_ALSA_SINK(alsaDevice.hwString, sinkName, safeDescription);
|
|
226
|
+
console.log(` Creating ${isInput ? 'source' : 'sink'} for ${alsaDevice.hwString}: ${alsaDevice.name}`);
|
|
227
|
+
(0, child_process_1.execSync)(command, {
|
|
228
|
+
timeout: 5000,
|
|
229
|
+
stdio: 'pipe',
|
|
230
|
+
});
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.log(` Failed to create ${isInput ? 'source' : 'sink'} for ${alsaDevice.hwString}:`, error instanceof Error ? error.message : String(error));
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function loadAlsaDevicesIntoPulseAudio() {
|
|
239
|
+
try {
|
|
240
|
+
console.log('Detecting ALSA hardware and ensuring PulseAudio coverage...');
|
|
241
|
+
try {
|
|
242
|
+
const modules = (0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.LIST_MODULES, {
|
|
243
|
+
encoding: 'utf-8',
|
|
244
|
+
timeout: PULSEAUDIO_TIMEOUTS.LIST_MODULES,
|
|
245
|
+
});
|
|
246
|
+
if (!modules.includes('module-alsa-card')) {
|
|
247
|
+
console.log(' Loading ALSA card module for auto-detection...');
|
|
248
|
+
(0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.LOAD_ALSA_MODULE, {
|
|
249
|
+
timeout: PULSEAUDIO_TIMEOUTS.LOAD_MODULE,
|
|
250
|
+
stdio: 'pipe',
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
console.log(' Note: Base ALSA module load failed (will create sinks manually)');
|
|
256
|
+
}
|
|
257
|
+
let outputDevices = [];
|
|
258
|
+
let inputDevices = [];
|
|
259
|
+
try {
|
|
260
|
+
const aplayOutput = (0, child_process_1.execSync)('aplay -l 2>/dev/null', {
|
|
261
|
+
encoding: 'utf-8',
|
|
262
|
+
timeout: 3000,
|
|
263
|
+
});
|
|
264
|
+
outputDevices = parseAlsaDevices(aplayOutput);
|
|
265
|
+
console.log(` Found ${outputDevices.length} ALSA output device(s)`);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.log(' No ALSA output devices found or aplay failed');
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
const arecordOutput = (0, child_process_1.execSync)('arecord -l 2>/dev/null', {
|
|
272
|
+
encoding: 'utf-8',
|
|
273
|
+
timeout: 3000,
|
|
274
|
+
});
|
|
275
|
+
inputDevices = parseAlsaDevices(arecordOutput);
|
|
276
|
+
console.log(` Found ${inputDevices.length} ALSA input device(s)`);
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
console.log(' No ALSA input devices found or arecord failed');
|
|
280
|
+
}
|
|
281
|
+
let createdCount = 0;
|
|
282
|
+
for (const device of outputDevices) {
|
|
283
|
+
if (!checkExistingSink(device.hwString, false)) {
|
|
284
|
+
if (createPulseAudioSink(device, false)) {
|
|
285
|
+
createdCount++;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
console.log(` ✓ Sink already exists for ${device.hwString}: ${device.name}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
for (const device of inputDevices) {
|
|
293
|
+
if (!checkExistingSink(device.hwString, true)) {
|
|
294
|
+
if (createPulseAudioSink(device, true)) {
|
|
295
|
+
createdCount++;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
console.log(` ✓ Source already exists for ${device.hwString}: ${device.name}`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (createdCount > 0) {
|
|
303
|
+
console.log(`✓ Created ${createdCount} PulseAudio sink(s)/source(s) for missing hardware`);
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
console.log('✓ All ALSA devices already have corresponding PulseAudio sinks/sources');
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
console.log('Note: Could not complete ALSA device loading:', error instanceof Error ? error.message : String(error));
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
function getDefaultDevices() {
|
|
314
|
+
try {
|
|
315
|
+
const infoOutput = (0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.INFO, {
|
|
316
|
+
encoding: 'utf-8',
|
|
317
|
+
timeout: PULSEAUDIO_TIMEOUTS.INFO_CHECK,
|
|
318
|
+
});
|
|
319
|
+
const defaultSinkMatch = infoOutput.match(/Default Sink: (.+)/);
|
|
320
|
+
const defaultSourceMatch = infoOutput.match(/Default Source: (.+)/);
|
|
321
|
+
return {
|
|
322
|
+
defaultSink: defaultSinkMatch?.[1]?.trim(),
|
|
323
|
+
defaultSource: defaultSourceMatch?.[1]?.trim(),
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
console.error('Failed to get default devices:', error);
|
|
328
|
+
return {};
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function getAudioDevices() {
|
|
332
|
+
if (!startPulseAudio()) {
|
|
333
|
+
console.error('Audio detection failed: PulseAudio unavailable');
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
const { defaultSink, defaultSource } = getDefaultDevices();
|
|
337
|
+
console.log(`Default sink: ${defaultSink}, Default source: ${defaultSource}`);
|
|
338
|
+
const outputs = [];
|
|
339
|
+
const inputs = [];
|
|
340
|
+
try {
|
|
341
|
+
const sinksOutput = (0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.LIST_SINKS, {
|
|
342
|
+
encoding: 'utf-8',
|
|
343
|
+
timeout: PULSEAUDIO_TIMEOUTS.LIST_DEVICES,
|
|
344
|
+
});
|
|
345
|
+
sinksOutput
|
|
346
|
+
.split(/^Sink #/m)
|
|
347
|
+
.slice(1)
|
|
348
|
+
.forEach(block => {
|
|
349
|
+
const device = parseAudioDevice(block, false);
|
|
350
|
+
if (device) {
|
|
351
|
+
device.isDefault = device.identifier === defaultSink;
|
|
352
|
+
outputs.push(device);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
console.log(`Detected ${outputs.length} audio output device(s) via PulseAudio`);
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
console.error('Failed to detect audio outputs:', error instanceof Error ? error.message : String(error));
|
|
359
|
+
}
|
|
360
|
+
try {
|
|
361
|
+
const sourcesOutput = (0, child_process_1.execSync)(PULSEAUDIO_COMMANDS.LIST_SOURCES, {
|
|
362
|
+
encoding: 'utf-8',
|
|
363
|
+
timeout: PULSEAUDIO_TIMEOUTS.LIST_DEVICES,
|
|
364
|
+
});
|
|
365
|
+
sourcesOutput
|
|
366
|
+
.split(/^Source #/m)
|
|
367
|
+
.slice(1)
|
|
368
|
+
.forEach(block => {
|
|
369
|
+
const device = parseAudioDevice(block, true);
|
|
370
|
+
if (device) {
|
|
371
|
+
device.isDefault = device.identifier === defaultSource;
|
|
372
|
+
inputs.push(device);
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
console.log(`Detected ${inputs.length} audio input device(s) via PulseAudio`);
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
console.error('Failed to detect audio inputs:', error instanceof Error ? error.message : String(error));
|
|
379
|
+
}
|
|
380
|
+
if (outputs.length === 0 && inputs.length === 0) {
|
|
381
|
+
console.log('No audio devices detected');
|
|
382
|
+
return undefined;
|
|
383
|
+
}
|
|
384
|
+
return { outputs, inputs };
|
|
385
|
+
}
|
|
8
386
|
async function getSystemInformation() {
|
|
9
387
|
const valueObject = {
|
|
10
388
|
baseboard: '*',
|
|
@@ -40,12 +418,15 @@ async function getSystemInformation() {
|
|
|
40
418
|
netIfaces = netIfaces.map((iface) => ({
|
|
41
419
|
...iface,
|
|
42
420
|
type: iface.type ||
|
|
43
|
-
(iface.ifaceName &&
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
: "unknown"),
|
|
421
|
+
(iface.ifaceName && (iface.ifaceName.startsWith('en') || iface.ifaceName.startsWith('eth'))
|
|
422
|
+
? 'wired'
|
|
423
|
+
: 'unknown'),
|
|
47
424
|
}));
|
|
48
425
|
info.networkInterfaces = netIfaces;
|
|
426
|
+
const audioDevices = getAudioDevices();
|
|
427
|
+
if (audioDevices) {
|
|
428
|
+
info.audioDevices = audioDevices;
|
|
429
|
+
}
|
|
49
430
|
const systemInfo = JSON.parse(JSON.stringify(info));
|
|
50
431
|
return systemInfo;
|
|
51
432
|
}
|
package/dist/sysinfo/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/sysinfo/node.ts"],"names":[],"mappings":";;;;;AAGA,oDA8DC;AAjED,0EAAmC;AAG5B,KAAK,UAAU,oBAAoB;IAMxC,MAAM,WAAW,GAAG;QAClB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,GAAG;QACpB,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,GAAG;QACnB,YAAY,EAAE,GAAG;QACjB,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,GAAG;QACZ,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,GAAG;QACT,YAAY,EAAE,GAAG;QACjB,eAAe,EAAE,GAAG;QACpB,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,GAAG;KACZ,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,2BAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAIvC,IAAI,SAAS,GAAG,MAAM,2BAAE,CAAC,iBAAiB,EAAE,CAAC;IAG7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAGD,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;QACzC,GAAG,KAAK;QACR,IAAI,EACF,KAAK,CAAC,IAAI;YACV,CAAC,KAAK,CAAC,SAAS;gBACd,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACvE,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC;KACjB,CAAC,CAAC,CAAC;IAGJ,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAGnC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpD,OAAO,UAAU,CAAC;AACpB,CAAC;AAaD,kBAAe,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/sysinfo/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -302,6 +302,29 @@ export interface System {
|
|
|
302
302
|
sku: string;
|
|
303
303
|
virtual: boolean;
|
|
304
304
|
}
|
|
305
|
+
export interface AudioPort {
|
|
306
|
+
name: string;
|
|
307
|
+
description: string;
|
|
308
|
+
type?: string;
|
|
309
|
+
priority?: number;
|
|
310
|
+
available?: boolean;
|
|
311
|
+
}
|
|
312
|
+
export interface AudioDevice {
|
|
313
|
+
identifier: string;
|
|
314
|
+
displayName: string;
|
|
315
|
+
description?: string;
|
|
316
|
+
formFactor?: string;
|
|
317
|
+
bus?: string;
|
|
318
|
+
volume?: number;
|
|
319
|
+
muted?: boolean;
|
|
320
|
+
isDefault?: boolean;
|
|
321
|
+
activePort?: string;
|
|
322
|
+
availablePorts?: AudioPort[];
|
|
323
|
+
}
|
|
324
|
+
export interface AudioDevices {
|
|
325
|
+
outputs: AudioDevice[];
|
|
326
|
+
inputs: AudioDevice[];
|
|
327
|
+
}
|
|
305
328
|
export interface DeviceTwinReportedProperties {
|
|
306
329
|
ip: DeviceIp[];
|
|
307
330
|
os: {
|
|
@@ -334,6 +357,7 @@ export interface DeviceTwinReportedProperties {
|
|
|
334
357
|
users: any[];
|
|
335
358
|
system: System;
|
|
336
359
|
jobs: Job[];
|
|
360
|
+
audioDevices?: AudioDevices;
|
|
337
361
|
}
|
|
338
362
|
export interface EdgeTwinReportedProperties {
|
|
339
363
|
lastError?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twin.types.d.ts","sourceRoot":"","sources":["../../src/types/twin.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"twin.types.d.ts","sourceRoot":"","sources":["../../src/types/twin.types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@phystack/hub-device",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.2-dev",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"format:check": "prettier --check \"src/**/*.{ts,js,json,md}\""
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@phystack/axios-proxy": "4.
|
|
16
|
-
"@phystack/socket.io-proxy": "4.
|
|
15
|
+
"@phystack/axios-proxy": "4.5.2-dev",
|
|
16
|
+
"@phystack/socket.io-proxy": "4.5.2-dev",
|
|
17
17
|
"async-mutex": "^0.5.0",
|
|
18
18
|
"axios-retry": "^4.4.1",
|
|
19
19
|
"bufferutil": "^4.0.8",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
},
|
|
36
36
|
"test": "react-scripts test",
|
|
37
37
|
"test:coverage": "npm run test -- --coverage --watchAll=false",
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "df22619bb62d7ec6793409e4f817ac787989afd0"
|
|
39
39
|
}
|
package/src/sysinfo/node.ts
CHANGED
|
@@ -1,5 +1,515 @@
|
|
|
1
1
|
import si from 'systeminformation';
|
|
2
|
-
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { AudioDevice, AudioDevices, AudioPort } from '../types/twin.types';
|
|
4
|
+
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// PULSEAUDIO COMMANDS
|
|
7
|
+
// ============================================================================
|
|
8
|
+
const PULSEAUDIO_COMMANDS = {
|
|
9
|
+
INFO: 'pactl info',
|
|
10
|
+
KILL: 'pulseaudio -k 2>/dev/null || true',
|
|
11
|
+
START_DAEMON: 'pulseaudio --daemonize --exit-idle-time=-1 --system=false',
|
|
12
|
+
WAIT: 'sleep 1',
|
|
13
|
+
LIST_MODULES: 'pactl list modules short',
|
|
14
|
+
LOAD_ALSA_MODULE: 'pactl load-module module-alsa-card',
|
|
15
|
+
LIST_SINKS: 'pactl list sinks',
|
|
16
|
+
LIST_SOURCES: 'pactl list sources',
|
|
17
|
+
LOAD_ALSA_SINK: (hwDevice: string, sinkName: string, description: string) =>
|
|
18
|
+
`pactl load-module module-alsa-sink device=${hwDevice} sink_name=${sinkName} sink_properties="device.description=${description}"`,
|
|
19
|
+
LOAD_ALSA_SOURCE: (hwDevice: string, sourceName: string, description: string) =>
|
|
20
|
+
`pactl load-module module-alsa-source device=${hwDevice} source_name=${sourceName} source_properties="device.description=${description}"`,
|
|
21
|
+
} as const;
|
|
22
|
+
|
|
23
|
+
const PULSEAUDIO_TIMEOUTS = {
|
|
24
|
+
INFO_CHECK: 2000,
|
|
25
|
+
KILL: 2000,
|
|
26
|
+
START: 5000,
|
|
27
|
+
LIST_MODULES: 2000,
|
|
28
|
+
LOAD_MODULE: 3000,
|
|
29
|
+
LIST_DEVICES: 5000,
|
|
30
|
+
} as const;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Build audio device description
|
|
34
|
+
*/
|
|
35
|
+
function buildAudioDescription(
|
|
36
|
+
name: string,
|
|
37
|
+
formFactor: string,
|
|
38
|
+
bus: string,
|
|
39
|
+
vendor: string,
|
|
40
|
+
isInput: boolean
|
|
41
|
+
): string {
|
|
42
|
+
const parts: string[] = [name];
|
|
43
|
+
|
|
44
|
+
if (formFactor === 'internal') {
|
|
45
|
+
parts.push(`(Built-in ${isInput ? 'Microphone' : 'Speaker'})`);
|
|
46
|
+
} else if (formFactor) {
|
|
47
|
+
parts.push(`(${formFactor})`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (bus) parts.push(`via ${bus.toUpperCase()}`);
|
|
51
|
+
if (vendor && !name.includes(vendor)) parts.push(`- ${vendor}`);
|
|
52
|
+
|
|
53
|
+
return parts.join(' ');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Parse PulseAudio device block and extract metadata
|
|
58
|
+
*/
|
|
59
|
+
function parseAudioDevice(block: string, isInput: boolean): AudioDevice | null {
|
|
60
|
+
const lines = block.split('\n');
|
|
61
|
+
const device: Partial<AudioDevice> = {};
|
|
62
|
+
const ports: AudioPort[] = [];
|
|
63
|
+
let inPortsSection = false;
|
|
64
|
+
|
|
65
|
+
for (let i = 0; i < lines.length; i++) {
|
|
66
|
+
const line = lines[i];
|
|
67
|
+
const trimmed = line.trim();
|
|
68
|
+
|
|
69
|
+
if (trimmed.startsWith('Name:')) {
|
|
70
|
+
device.identifier = trimmed.split('Name:')[1].trim();
|
|
71
|
+
} else if (trimmed.startsWith('Description:')) {
|
|
72
|
+
device.displayName = trimmed.split('Description:')[1].trim();
|
|
73
|
+
} else if (trimmed.startsWith('Volume:')) {
|
|
74
|
+
const match = trimmed.match(/(\d+)%/);
|
|
75
|
+
if (match) device.volume = parseInt(match[1], 10);
|
|
76
|
+
} else if (trimmed.startsWith('Mute:')) {
|
|
77
|
+
device.muted = trimmed.toLowerCase().includes('yes');
|
|
78
|
+
} else if (trimmed.startsWith('Active Port:')) {
|
|
79
|
+
device.activePort = trimmed.split('Active Port:')[1].trim();
|
|
80
|
+
console.log(`[Audio] Found active port: ${device.activePort}`);
|
|
81
|
+
} else if (trimmed.startsWith('Ports:')) {
|
|
82
|
+
inPortsSection = true;
|
|
83
|
+
console.log(`[Audio] Entering ports section for device`);
|
|
84
|
+
} else if (inPortsSection) {
|
|
85
|
+
// Check if we've left the ports section (next section starts with capital letter and no indentation)
|
|
86
|
+
if (trimmed.match(/^[A-Z][a-z]+:/) && !line.match(/^\s/)) {
|
|
87
|
+
inPortsSection = false;
|
|
88
|
+
console.log(`[Audio] Exiting ports section, found ${ports.length} ports`);
|
|
89
|
+
} else if (trimmed.length > 0 && line.match(/^\s+\S/)) {
|
|
90
|
+
// Port line has indentation (spaces or tabs) followed by content
|
|
91
|
+
// Parse port line: "analog-output-headphones: Headphones (type: Headphones, priority: 9900, availability unknown)"
|
|
92
|
+
const portMatch = trimmed.match(/^([^:]+):\s*(.+?)(?:\s*\((.+)\))?$/);
|
|
93
|
+
if (portMatch) {
|
|
94
|
+
const portName = portMatch[1].trim();
|
|
95
|
+
const portDescription = portMatch[2].trim();
|
|
96
|
+
const portDetails = portMatch[3];
|
|
97
|
+
|
|
98
|
+
const port: AudioPort = {
|
|
99
|
+
name: portName,
|
|
100
|
+
description: portDescription,
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// Parse additional details if present
|
|
104
|
+
if (portDetails) {
|
|
105
|
+
const typeMatch = portDetails.match(/type:\s*([^,]+)/);
|
|
106
|
+
const priorityMatch = portDetails.match(/priority:\s*(\d+)/);
|
|
107
|
+
const availableMatch = portDetails.match(/available|availability unknown/);
|
|
108
|
+
|
|
109
|
+
if (typeMatch) port.type = typeMatch[1].trim();
|
|
110
|
+
if (priorityMatch) port.priority = parseInt(priorityMatch[1], 10);
|
|
111
|
+
if (availableMatch) port.available = availableMatch[0] === 'available';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
console.log(`[Audio] Parsed port: ${portName} - ${portDescription}`);
|
|
115
|
+
ports.push(port);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
} else if (trimmed.includes('device.form_factor =')) {
|
|
119
|
+
const match = trimmed.match(/"([^"]+)"/);
|
|
120
|
+
if (match) device.formFactor = match[1];
|
|
121
|
+
} else if (trimmed.includes('device.bus =')) {
|
|
122
|
+
const match = trimmed.match(/"([^"]+)"/);
|
|
123
|
+
if (match) device.bus = match[1];
|
|
124
|
+
} else if (trimmed.includes('device.vendor.name =')) {
|
|
125
|
+
const match = trimmed.match(/"([^"]+)"/);
|
|
126
|
+
if (match && !device.description) device.description = match[1];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Skip monitor sources (virtual recording outputs)
|
|
131
|
+
if (isInput && device.identifier?.includes('.monitor')) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (!device.identifier) return null;
|
|
136
|
+
|
|
137
|
+
// Add ports if any were found
|
|
138
|
+
if (ports.length > 0) {
|
|
139
|
+
device.availablePorts = ports;
|
|
140
|
+
console.log(`[Audio] Device ${device.identifier} has ${ports.length} ports, active: ${device.activePort}`);
|
|
141
|
+
} else {
|
|
142
|
+
console.log(`[Audio] Device ${device.identifier} has NO ports detected`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Build rich description
|
|
146
|
+
if (device.displayName) {
|
|
147
|
+
device.description = buildAudioDescription(
|
|
148
|
+
device.displayName,
|
|
149
|
+
device.formFactor || '',
|
|
150
|
+
device.bus || '',
|
|
151
|
+
device.description || '',
|
|
152
|
+
isInput
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return device as AudioDevice;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Start PulseAudio daemon if not running
|
|
161
|
+
* Service runs as root, so user mode has full hardware access
|
|
162
|
+
*/
|
|
163
|
+
function startPulseAudio(): boolean {
|
|
164
|
+
// Check if already running and accessible
|
|
165
|
+
try {
|
|
166
|
+
execSync(PULSEAUDIO_COMMANDS.INFO, {
|
|
167
|
+
encoding: 'utf-8',
|
|
168
|
+
timeout: PULSEAUDIO_TIMEOUTS.INFO_CHECK,
|
|
169
|
+
stdio: 'pipe',
|
|
170
|
+
});
|
|
171
|
+
console.log('PulseAudio is running and accessible');
|
|
172
|
+
|
|
173
|
+
// Ensure ALSA devices (especially inputs) are loaded
|
|
174
|
+
loadAlsaDevicesIntoPulseAudio();
|
|
175
|
+
|
|
176
|
+
return true;
|
|
177
|
+
} catch (error) {
|
|
178
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
179
|
+
console.log('PulseAudio not accessible:', errorMsg);
|
|
180
|
+
console.log('Attempting to start PulseAudio...');
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Kill any existing instances and start fresh as the current user (root)
|
|
184
|
+
try {
|
|
185
|
+
// Kill existing instances
|
|
186
|
+
execSync(PULSEAUDIO_COMMANDS.KILL, {
|
|
187
|
+
timeout: PULSEAUDIO_TIMEOUTS.KILL,
|
|
188
|
+
stdio: 'pipe',
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Wait for cleanup
|
|
192
|
+
execSync(PULSEAUDIO_COMMANDS.WAIT, { stdio: 'pipe' });
|
|
193
|
+
|
|
194
|
+
// Start new daemon
|
|
195
|
+
execSync(PULSEAUDIO_COMMANDS.START_DAEMON, {
|
|
196
|
+
timeout: PULSEAUDIO_TIMEOUTS.START,
|
|
197
|
+
stdio: 'pipe',
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// Wait for startup
|
|
201
|
+
execSync(PULSEAUDIO_COMMANDS.WAIT, { stdio: 'pipe' });
|
|
202
|
+
|
|
203
|
+
// Verify it's running
|
|
204
|
+
execSync(PULSEAUDIO_COMMANDS.INFO, {
|
|
205
|
+
timeout: PULSEAUDIO_TIMEOUTS.INFO_CHECK,
|
|
206
|
+
stdio: 'pipe',
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
console.log('✓ PulseAudio started successfully');
|
|
210
|
+
|
|
211
|
+
// Load ALSA devices (including input sources)
|
|
212
|
+
loadAlsaDevicesIntoPulseAudio();
|
|
213
|
+
|
|
214
|
+
return true;
|
|
215
|
+
} catch (error) {
|
|
216
|
+
console.error(
|
|
217
|
+
'✗ Failed to start PulseAudio:',
|
|
218
|
+
error instanceof Error ? error.message : String(error)
|
|
219
|
+
);
|
|
220
|
+
console.error(' Hint: Make sure no other PulseAudio instances are running as different users');
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Parse ALSA device list to extract available hardware devices
|
|
227
|
+
*/
|
|
228
|
+
interface AlsaDevice {
|
|
229
|
+
card: number;
|
|
230
|
+
device: number;
|
|
231
|
+
name: string;
|
|
232
|
+
hwString: string; // e.g., "hw:0,0"
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function parseAlsaDevices(aplayOutput: string): AlsaDevice[] {
|
|
236
|
+
const devices: AlsaDevice[] = [];
|
|
237
|
+
|
|
238
|
+
// Parse lines like: "card 0: PCH [HDA Intel PCH], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]"
|
|
239
|
+
const regex = /card (\d+): ([^,]+), device (\d+): ([^\[]+)\[([^\]]+)\]/g;
|
|
240
|
+
let match;
|
|
241
|
+
|
|
242
|
+
while ((match = regex.exec(aplayOutput)) !== null) {
|
|
243
|
+
const card = parseInt(match[1], 10);
|
|
244
|
+
const device = parseInt(match[3], 10);
|
|
245
|
+
const name = match[5].trim(); // Use the name in brackets
|
|
246
|
+
|
|
247
|
+
devices.push({
|
|
248
|
+
card,
|
|
249
|
+
device,
|
|
250
|
+
name,
|
|
251
|
+
hwString: `hw:${card},${device}`,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return devices;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Check if a PulseAudio sink/source already exists for an ALSA device
|
|
260
|
+
*/
|
|
261
|
+
function checkExistingSink(hwString: string, isInput: boolean): boolean {
|
|
262
|
+
try {
|
|
263
|
+
const command = isInput ? PULSEAUDIO_COMMANDS.LIST_SOURCES : PULSEAUDIO_COMMANDS.LIST_SINKS;
|
|
264
|
+
const output = execSync(command, {
|
|
265
|
+
encoding: 'utf-8',
|
|
266
|
+
timeout: 3000,
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// Check if any sink/source references this ALSA device
|
|
270
|
+
// Look for patterns like "alsa.device = "0"" and "alsa.card = "0""
|
|
271
|
+
const [card, device] = hwString.replace('hw:', '').split(',');
|
|
272
|
+
|
|
273
|
+
// Check for exact device match (most specific)
|
|
274
|
+
const devicePattern = new RegExp(`alsa\\.device\\s*=\\s*"${device}"`, 'i');
|
|
275
|
+
const cardPattern = new RegExp(`alsa\\.card\\s*=\\s*"${card}"`, 'i');
|
|
276
|
+
|
|
277
|
+
// Split into blocks and check if any block has both card and device match
|
|
278
|
+
const blocks = output.split(/^(Sink|Source) #/m);
|
|
279
|
+
for (const block of blocks) {
|
|
280
|
+
if (cardPattern.test(block) && devicePattern.test(block)) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return false;
|
|
286
|
+
} catch (error) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Create PulseAudio sink for an ALSA device
|
|
293
|
+
*/
|
|
294
|
+
function createPulseAudioSink(alsaDevice: AlsaDevice, isInput: boolean): boolean {
|
|
295
|
+
try {
|
|
296
|
+
const sinkName = isInput
|
|
297
|
+
? `alsa_input_${alsaDevice.card}_${alsaDevice.device}`
|
|
298
|
+
: `alsa_output_${alsaDevice.card}_${alsaDevice.device}`;
|
|
299
|
+
|
|
300
|
+
// Simplify description to avoid quoting/escaping issues with PulseAudio
|
|
301
|
+
// Replace spaces and special chars with underscores
|
|
302
|
+
const safeDescription = `${alsaDevice.name}_${alsaDevice.hwString}`.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
303
|
+
|
|
304
|
+
const command = isInput
|
|
305
|
+
? PULSEAUDIO_COMMANDS.LOAD_ALSA_SOURCE(alsaDevice.hwString, sinkName, safeDescription)
|
|
306
|
+
: PULSEAUDIO_COMMANDS.LOAD_ALSA_SINK(alsaDevice.hwString, sinkName, safeDescription);
|
|
307
|
+
|
|
308
|
+
console.log(` Creating ${isInput ? 'source' : 'sink'} for ${alsaDevice.hwString}: ${alsaDevice.name}`);
|
|
309
|
+
|
|
310
|
+
execSync(command, {
|
|
311
|
+
timeout: 5000,
|
|
312
|
+
stdio: 'pipe',
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
return true;
|
|
316
|
+
} catch (error) {
|
|
317
|
+
console.log(` Failed to create ${isInput ? 'source' : 'sink'} for ${alsaDevice.hwString}:`,
|
|
318
|
+
error instanceof Error ? error.message : String(error));
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Ensure PulseAudio loads all ALSA devices (including input devices)
|
|
325
|
+
* This function:
|
|
326
|
+
* 1. Queries ALSA hardware to find all available devices
|
|
327
|
+
* 2. Checks what PulseAudio has already detected
|
|
328
|
+
* 3. Creates missing sinks/sources dynamically
|
|
329
|
+
* 4. Works generically across all device types
|
|
330
|
+
*/
|
|
331
|
+
function loadAlsaDevicesIntoPulseAudio(): void {
|
|
332
|
+
try {
|
|
333
|
+
console.log('Detecting ALSA hardware and ensuring PulseAudio coverage...');
|
|
334
|
+
|
|
335
|
+
// Step 1: Load the base ALSA card module (for auto-detection)
|
|
336
|
+
try {
|
|
337
|
+
const modules = execSync(PULSEAUDIO_COMMANDS.LIST_MODULES, {
|
|
338
|
+
encoding: 'utf-8',
|
|
339
|
+
timeout: PULSEAUDIO_TIMEOUTS.LIST_MODULES,
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
if (!modules.includes('module-alsa-card')) {
|
|
343
|
+
console.log(' Loading ALSA card module for auto-detection...');
|
|
344
|
+
execSync(PULSEAUDIO_COMMANDS.LOAD_ALSA_MODULE, {
|
|
345
|
+
timeout: PULSEAUDIO_TIMEOUTS.LOAD_MODULE,
|
|
346
|
+
stdio: 'pipe',
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
} catch (error) {
|
|
350
|
+
console.log(' Note: Base ALSA module load failed (will create sinks manually)');
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Step 2: Query ALSA for actual hardware devices
|
|
354
|
+
let outputDevices: AlsaDevice[] = [];
|
|
355
|
+
let inputDevices: AlsaDevice[] = [];
|
|
356
|
+
|
|
357
|
+
try {
|
|
358
|
+
const aplayOutput = execSync('aplay -l 2>/dev/null', {
|
|
359
|
+
encoding: 'utf-8',
|
|
360
|
+
timeout: 3000,
|
|
361
|
+
});
|
|
362
|
+
outputDevices = parseAlsaDevices(aplayOutput);
|
|
363
|
+
console.log(` Found ${outputDevices.length} ALSA output device(s)`);
|
|
364
|
+
} catch (error) {
|
|
365
|
+
console.log(' No ALSA output devices found or aplay failed');
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
try {
|
|
369
|
+
const arecordOutput = execSync('arecord -l 2>/dev/null', {
|
|
370
|
+
encoding: 'utf-8',
|
|
371
|
+
timeout: 3000,
|
|
372
|
+
});
|
|
373
|
+
inputDevices = parseAlsaDevices(arecordOutput);
|
|
374
|
+
console.log(` Found ${inputDevices.length} ALSA input device(s)`);
|
|
375
|
+
} catch (error) {
|
|
376
|
+
console.log(' No ALSA input devices found or arecord failed');
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Step 3: For each ALSA device, check if PA has a sink/source, if not create one
|
|
380
|
+
let createdCount = 0;
|
|
381
|
+
|
|
382
|
+
for (const device of outputDevices) {
|
|
383
|
+
if (!checkExistingSink(device.hwString, false)) {
|
|
384
|
+
if (createPulseAudioSink(device, false)) {
|
|
385
|
+
createdCount++;
|
|
386
|
+
}
|
|
387
|
+
} else {
|
|
388
|
+
console.log(` ✓ Sink already exists for ${device.hwString}: ${device.name}`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
for (const device of inputDevices) {
|
|
393
|
+
if (!checkExistingSink(device.hwString, true)) {
|
|
394
|
+
if (createPulseAudioSink(device, true)) {
|
|
395
|
+
createdCount++;
|
|
396
|
+
}
|
|
397
|
+
} else {
|
|
398
|
+
console.log(` ✓ Source already exists for ${device.hwString}: ${device.name}`);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (createdCount > 0) {
|
|
403
|
+
console.log(`✓ Created ${createdCount} PulseAudio sink(s)/source(s) for missing hardware`);
|
|
404
|
+
} else {
|
|
405
|
+
console.log('✓ All ALSA devices already have corresponding PulseAudio sinks/sources');
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
} catch (error) {
|
|
409
|
+
console.log(
|
|
410
|
+
'Note: Could not complete ALSA device loading:',
|
|
411
|
+
error instanceof Error ? error.message : String(error)
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Get default sink and source from PulseAudio
|
|
418
|
+
*/
|
|
419
|
+
function getDefaultDevices(): { defaultSink?: string; defaultSource?: string } {
|
|
420
|
+
try {
|
|
421
|
+
const infoOutput = execSync(PULSEAUDIO_COMMANDS.INFO, {
|
|
422
|
+
encoding: 'utf-8',
|
|
423
|
+
timeout: PULSEAUDIO_TIMEOUTS.INFO_CHECK,
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
const defaultSinkMatch = infoOutput.match(/Default Sink: (.+)/);
|
|
427
|
+
const defaultSourceMatch = infoOutput.match(/Default Source: (.+)/);
|
|
428
|
+
|
|
429
|
+
return {
|
|
430
|
+
defaultSink: defaultSinkMatch?.[1]?.trim(),
|
|
431
|
+
defaultSource: defaultSourceMatch?.[1]?.trim(),
|
|
432
|
+
};
|
|
433
|
+
} catch (error) {
|
|
434
|
+
console.error('Failed to get default devices:', error);
|
|
435
|
+
return {};
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Get available audio input/output devices using PulseAudio
|
|
441
|
+
*/
|
|
442
|
+
function getAudioDevices(): AudioDevices | undefined {
|
|
443
|
+
if (!startPulseAudio()) {
|
|
444
|
+
console.error('Audio detection failed: PulseAudio unavailable');
|
|
445
|
+
return undefined;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// Get default devices first
|
|
449
|
+
const { defaultSink, defaultSource } = getDefaultDevices();
|
|
450
|
+
console.log(`Default sink: ${defaultSink}, Default source: ${defaultSource}`);
|
|
451
|
+
|
|
452
|
+
const outputs: AudioDevice[] = [];
|
|
453
|
+
const inputs: AudioDevice[] = [];
|
|
454
|
+
|
|
455
|
+
// Detect output devices (sinks)
|
|
456
|
+
try {
|
|
457
|
+
const sinksOutput = execSync(PULSEAUDIO_COMMANDS.LIST_SINKS, {
|
|
458
|
+
encoding: 'utf-8',
|
|
459
|
+
timeout: PULSEAUDIO_TIMEOUTS.LIST_DEVICES,
|
|
460
|
+
});
|
|
461
|
+
sinksOutput
|
|
462
|
+
.split(/^Sink #/m)
|
|
463
|
+
.slice(1)
|
|
464
|
+
.forEach(block => {
|
|
465
|
+
const device = parseAudioDevice(block, false);
|
|
466
|
+
if (device) {
|
|
467
|
+
// Mark as default if it matches the default sink
|
|
468
|
+
device.isDefault = device.identifier === defaultSink;
|
|
469
|
+
outputs.push(device);
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
console.log(`Detected ${outputs.length} audio output device(s) via PulseAudio`);
|
|
473
|
+
} catch (error) {
|
|
474
|
+
console.error(
|
|
475
|
+
'Failed to detect audio outputs:',
|
|
476
|
+
error instanceof Error ? error.message : String(error)
|
|
477
|
+
);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// Detect input devices (sources)
|
|
481
|
+
try {
|
|
482
|
+
const sourcesOutput = execSync(PULSEAUDIO_COMMANDS.LIST_SOURCES, {
|
|
483
|
+
encoding: 'utf-8',
|
|
484
|
+
timeout: PULSEAUDIO_TIMEOUTS.LIST_DEVICES,
|
|
485
|
+
});
|
|
486
|
+
sourcesOutput
|
|
487
|
+
.split(/^Source #/m)
|
|
488
|
+
.slice(1)
|
|
489
|
+
.forEach(block => {
|
|
490
|
+
const device = parseAudioDevice(block, true);
|
|
491
|
+
if (device) {
|
|
492
|
+
// Mark as default if it matches the default source
|
|
493
|
+
device.isDefault = device.identifier === defaultSource;
|
|
494
|
+
inputs.push(device);
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
console.log(`Detected ${inputs.length} audio input device(s) via PulseAudio`);
|
|
498
|
+
} catch (error) {
|
|
499
|
+
console.error(
|
|
500
|
+
'Failed to detect audio inputs:',
|
|
501
|
+
error instanceof Error ? error.message : String(error)
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Return undefined if no devices found
|
|
506
|
+
if (outputs.length === 0 && inputs.length === 0) {
|
|
507
|
+
console.log('No audio devices detected');
|
|
508
|
+
return undefined;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
return { outputs, inputs };
|
|
512
|
+
}
|
|
3
513
|
|
|
4
514
|
export async function getSystemInformation() {
|
|
5
515
|
// const now = new Date();
|
|
@@ -50,15 +560,20 @@ export async function getSystemInformation() {
|
|
|
50
560
|
...iface,
|
|
51
561
|
type:
|
|
52
562
|
iface.type ||
|
|
53
|
-
(iface.ifaceName &&
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
: "unknown"),
|
|
563
|
+
(iface.ifaceName && (iface.ifaceName.startsWith('en') || iface.ifaceName.startsWith('eth'))
|
|
564
|
+
? 'wired'
|
|
565
|
+
: 'unknown'),
|
|
57
566
|
}));
|
|
58
567
|
|
|
59
568
|
// Inject the full list of network interfaces into our system info.
|
|
60
569
|
info.networkInterfaces = netIfaces;
|
|
61
570
|
|
|
571
|
+
// Get audio devices using PulseAudio
|
|
572
|
+
const audioDevices = getAudioDevices();
|
|
573
|
+
if (audioDevices) {
|
|
574
|
+
info.audioDevices = audioDevices;
|
|
575
|
+
}
|
|
576
|
+
|
|
62
577
|
// TODO: update so structure is aligned with what the browser version will output. Create a type.
|
|
63
578
|
const systemInfo = JSON.parse(JSON.stringify(info));
|
|
64
579
|
|
package/src/types/twin.types.ts
CHANGED
|
@@ -329,6 +329,32 @@ export interface System {
|
|
|
329
329
|
virtual: boolean;
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
+
export interface AudioPort {
|
|
333
|
+
name: string; // Port identifier (e.g., "analog-output-headphones")
|
|
334
|
+
description: string; // Human-readable description (e.g., "Headphones")
|
|
335
|
+
type?: string; // Port type (e.g., "Headphones", "HDMI", "Line")
|
|
336
|
+
priority?: number; // Port priority
|
|
337
|
+
available?: boolean; // Whether port is available
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export interface AudioDevice {
|
|
341
|
+
identifier: string;
|
|
342
|
+
displayName: string;
|
|
343
|
+
description?: string;
|
|
344
|
+
formFactor?: string;
|
|
345
|
+
bus?: string;
|
|
346
|
+
volume?: number; // Volume level (0-100%)
|
|
347
|
+
muted?: boolean; // Mute status
|
|
348
|
+
isDefault?: boolean; // Whether this is the system default device
|
|
349
|
+
activePort?: string; // Currently active port (e.g., "analog-output-headphones")
|
|
350
|
+
availablePorts?: AudioPort[]; // Available ports for this device
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export interface AudioDevices {
|
|
354
|
+
outputs: AudioDevice[];
|
|
355
|
+
inputs: AudioDevice[];
|
|
356
|
+
}
|
|
357
|
+
|
|
332
358
|
export interface DeviceTwinReportedProperties {
|
|
333
359
|
ip: DeviceIp[];
|
|
334
360
|
os: {
|
|
@@ -361,6 +387,7 @@ export interface DeviceTwinReportedProperties {
|
|
|
361
387
|
users: any[]; // todo: update
|
|
362
388
|
system: System;
|
|
363
389
|
jobs: Job[];
|
|
390
|
+
audioDevices?: AudioDevices;
|
|
364
391
|
}
|
|
365
392
|
|
|
366
393
|
export interface EdgeTwinReportedProperties {
|