Line data Source code
1 : /*
2 : * Copyright (C) 2025 Red Hat, Inc.
3 : * SPDX-License-Identifier: GPL-3.0-or-later
4 : */
5 :
6 : import { Channel } from '../channel';
7 :
8 : /* We allow accessing arbitrary fields by a Partial<Record<>> type, but having
9 : * an explicit list is useful for autocompletion. */
10 : export interface OsRelease {
11 : NAME?: string;
12 : VERSION?: string;
13 : RELEASE_TYPE?: string;
14 : ID?: string;
15 : VERSION_ID?: string;
16 : VERSION_CODENAME?: string;
17 : PLATFORM_ID?: string;
18 : PRETTY_NAME?: string;
19 : ANSI_COLOR?: string;
20 : LOGO?: string;
21 : CPE_NAME?: string;
22 : DEFAULT_HOSTNAME?: string;
23 : HOME_URL?: string;
24 : DOCUMENTATION_URL?: string;
25 : SUPPORT_URL?: string;
26 : BUG_REPORT_URL?: string;
27 : SUPPORT_END?: string;
28 : VARIANT?: string;
29 : VARIANT_ID?: string;
30 : }
31 :
32 : export interface User {
33 : fullname: string;
34 : gid: number;
35 : group: string;
36 : groups: string[];
37 : home: string;
38 : name: string;
39 : shell: string;
40 : uid: number;
41 : }
42 :
43 : export interface WebserverInfo {
44 : version: string;
45 : }
46 :
47 : export interface Info {
48 : channels: Partial<Record<string, string[]>>;
49 : os_release: OsRelease & Partial<Record<string, string>>;
50 : user: User;
51 : ws: WebserverInfo;
52 : }
53 :
54 19 : export function fetch_info(): Promise<Info> {
55 19 : const channel = new Channel({ payload: 'info' });
56 19 : return new Promise((resolve, reject) => {
57 19 : channel.on('data', data => {
58 19 : resolve(JSON.parse(data));
59 19 : channel.close();
60 19 : });
61 19 : channel.on('close', msg => {
62 19 : reject(msg);
63 19 : });
64 19 : });
65 19 : }
|