Files
decky-frontend-lib/src/globals/steam-client/system/network/index.ts
Yao Chung Hu 131ab4cc11 feat(globals): Steam client reference (#92)
* change: Add SteamClient types

Steam Version:  1690583737
Steam Client Build Date:  Sat, Jul 29 02:44 UTC -08:00

* new: Document some SteamClient interfaces

Using the SDH discord server, GitHub and some personal findings, I tried to document as much SteamClient functions as I can.

* new: Document some SteamClient interfaces - part 2

* new: Document some SteamClient interfaces - part 3

* new: Document some SteamClient interfaces - part 4

* new: Document some SteamClient interfaces - part 5

* new: Document some SteamClient interfaces - part 6

* new: Document some SteamClient interfaces - part 7

* change: Update interfaces to Steam Version 1691097434

Steam Version:  1691097434
Steam Client Build Date:  Fri, Aug 4 04:54 UTC -08:00

* new: Document some SteamClient interfaces - part 8

* new: Document some SteamClient interfaces - part 9

* change: Update interfaces to Steam Version 1694466342

Steam Version:  1694466342
Steam Client Build Date:  Tue, Sep 12 04:59 UTC +08:00

* new: Document some SteamClient interfaces - part 10

* new: Document some SteamClient interfaces - part 11

* new: Document some SteamClient interfaces - part 12

* new: Document some SteamClient interfaces - part 13

* new: Document some SteamClient interfaces - part 14

* change: Update interfaces to Steam Version 1698260427

Steam Version:  1698260427
Steam Client Build Date:  Thu, Oct 26 2:40 AM UTC -08:00

* new: Document some SteamClient interfaces - part 10

* change: Update interfaces to Steam Version 1700160213

Steam Version:  1700160213
Steam Client Build Date:  Fri, Nov 17 2:23 AM UTC +08:00

* docs(SteamClient): document some interfaces

* change: Fix formatting style

* docs(SteamClient): document protobufs & System.Report

* docs(SteamClient): document CMsgMonitorInfo

* docs(SteamClient): document remaining messages

* docs(SteamClient): update interfaces to Steam Version 1702515219
Steam Version:  1702515219
Steam Client Build Date:  Thu, Dec 14 00:36 UTC -08:00

* docs(SteamClient): update interfaces to Steam Version 1704329464
Steam Version:  1704329464
Steam Client Build Date:  Thu, Jan 4 12:23 AM UTC -08:00

* docs(SteamClient): update interfaces to Steam Version 1705630720
Steam Version:  1705630720
Steam Client Build Date:  Fri, Jan 19 1:58 AM UTC -08:00

* docs(SteamClient): update interfaces to Steam Version 1706914901
Steam Version:  1706914901
Steam Client Build Date:  Fri, Feb 2 8:46 PM UTC -08:00

* docs(SteamClient): update interfaces to Steam Version 1709920887
Steam Version:  1709920887
Steam Client Build Date:  Thu, Mar 7 5:29 PM UTC -08:00

* docs(SteamClient): update interfaces to Steam Version 1710786209
Steam Version:  1710786209
Steam Client Build Date:  Mon, Mar 18 7:07 PM UTC -08:00

* docs(SteamClient): document even more interfaces

* new: Document some SteamClient interfaces - part 15

* Fix QAM button bit number

* new: Document some SteamClient interfaces - part 16

* change: Update interfaces to Steam Version 1714854927

Steam Version: 1714854927
Steam Client Build Date:  Sat, May 4 7:11 AM UTC -08:00

* change: Refactor and reorganize SteamClient

* docs(SteamClient): document more notification interfaces

* docs(SteamClient): document more interfaces

* docs(SteamClient): add some descriptions

* docs(SteamClient): remove duplicate types

* change: Fix rebase errors

* Updated ControllerStateChange

* Fix typo

* docs(SteamClient): update interfaces to Steam Version 1723601482

Steam Version:  1723601482
Steam Client Build Date:  Wed, Aug 14 01:51 UTC -08:00

* docs(SteamClient): update interfaces to 1725654351

* docs(SteamClient): update interfaces to 1730416762

* docs(SteamClient): forgot some stuff

* docs(SteamClient): add missed interfaces

* docs(SteamClient): update enums

* docs(SteamClient): add some things and move stuff around

* docs(SteamClient): move shared enums/interfaces to a separate file

* docs(SteamClient): add more stuff

* docs(SteamClient): reword some things

* docs(SteamClient): new BrowserView things

* docs(SteamClient): review fixes

* move to src/globals

---------

Co-authored-by: ricewind012 <58827198+ricewind012@users.noreply.github.com>
Co-authored-by: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com>
Co-authored-by: Xander <xander@isxander.dev>
2025-04-23 11:20:48 -04:00

404 lines
11 KiB
TypeScript

import { JsPbMessage, OperationResponse, Unregisterable } from "../../shared";
import {Device} from "./Device";
export interface Network {
Device: Device;
ForceRefresh(): Promise<OperationResponse>;
ForceTestConnectivity(): void;
GetProxyInfo(): Promise<ProxyInfo>;
RegisterForAppSummaryUpdate(callback: (data: AppSummary) => void): Unregisterable;
/**
* If `state` is deserialized, returns {@link CGameNetworkingUI_ConnectionState}.
* @returns an object that can be used to unregister the callback.
*/
RegisterForConnectionStateUpdate(callback: (state: ArrayBuffer) => void): Unregisterable;
RegisterForConnectivityTestChanges(callback: (connectivityTest: ConnectivityTest) => void): Unregisterable;
/**
* If `data` is deserialized, returns {@link CMsgNetworkDevicesData}.
* @returns an object that can be used to unregister the callback.
*/
RegisterForDeviceChanges(callback: (data: ArrayBuffer) => void): Unregisterable;
SetFakeLocalSystemState(state: ENetFakeLocalSystemState): void;
SetProxyInfo(mode: number, address: string, port: number, excludeLocal: boolean): void;
SetWifiEnabled(value: boolean): Promise<OperationResponse>;
StartScanningForNetworks(): Promise<OperationResponse>;
StopScanningForNetworks(): Promise<OperationResponse>;
}
export interface ConnectivityTest {
eConnectivityTestResult: EConnectivityTestResult;
eFakeState: ENetFakeLocalSystemState;
bChecking: boolean;
}
export enum EConnectivityTestResult {
Unknown,
Connected,
CaptivePortal,
TimedOut,
Failed,
WifiDisabled,
NoLAN,
}
export interface ProxyInfo {
proxy_mode: number;
address: string;
port: number;
exclude_local: boolean;
}
interface AppSummary {
nAppID: number;
/**
* If deserialized, returns {@link CGameNetworkingUI_AppSummary}.
*/
serializedMessage: ArrayBuffer;
}
export enum ENetFakeLocalSystemState {
Normal,
NoLAN,
CaptivePortal_Redirected,
CaptivePortal_InPlace,
NoInternet,
NoSteam,
}
export interface CMsgNetworkDevicesData extends JsPbMessage {
devices(): NetworkDevice[];
is_wifi_enabled(): boolean;
is_wifi_scanning_enabled(): boolean;
}
export interface CGameNetworkingUI_ConnectionSummary {
transport_kind?: number;
connection_state?: number;
sdrpop_local?: number;
sdrpop_remote?: number;
ping_ms?: number;
packet_loss?: number;
ping_default_internet_route?: number;
ip_was_shared?: number;
}
export interface CGameNetworkingUI_AppSummary {
appid?: number;
ip_was_shared_with_friend?: boolean;
ip_was_shared_with_nonfriend?: boolean;
active_connections?: number;
main_cxn?: CGameNetworkingUI_ConnectionSummary;
}
export interface SteamDatagramLinkInstantaneousStats {
out_packets_per_sec_x10: number | undefined;
out_bytes_per_sec: number | undefined;
in_packets_per_sec_x10: number | undefined;
in_bytes_per_sec: number | undefined;
ping_ms: number | undefined;
packets_dropped_pct: number | undefined;
packets_weird_sequence_pct: number | undefined;
peak_jitter_usec: number | undefined;
}
export interface SteamDatagramLinkLifetimeStats {
connected_seconds: number | undefined;
packets_sent: number | undefined;
kb_sent: number | undefined;
packets_recv: number | undefined;
kb_recv: number | undefined;
packets_recv_sequenced: number | undefined;
packets_recv_dropped: number | undefined;
packets_recv_out_of_order: number | undefined;
packets_recv_out_of_order_corrected: number | undefined;
packets_recv_duplicate: number | undefined;
packets_recv_lurch: number | undefined;
multipath_packets_recv_sequenced: number[];
multipath_packets_recv_later: number[];
multipath_send_enabled: number | undefined;
quality_histogram_100: number | undefined;
quality_histogram_99: number | undefined;
quality_histogram_97: number | undefined;
quality_histogram_95: number | undefined;
quality_histogram_90: number | undefined;
quality_histogram_75: number | undefined;
quality_histogram_50: number | undefined;
quality_histogram_1: number | undefined;
quality_histogram_dead: number | undefined;
quality_ntile_2nd: number | undefined;
quality_ntile_5th: number | undefined;
quality_ntile_25th: number | undefined;
quality_ntile_50th: number | undefined;
ping_histogram_25: number | undefined;
ping_histogram_50: number | undefined;
ping_histogram_75: number | undefined;
ping_histogram_100: number | undefined;
ping_histogram_125: number | undefined;
ping_histogram_150: number | undefined;
ping_histogram_200: number | undefined;
ping_histogram_300: number | undefined;
ping_histogram_max: number | undefined;
ping_ntile_5th: number | undefined;
ping_ntile_50th: number | undefined;
ping_ntile_75th: number | undefined;
ping_ntile_95th: number | undefined;
ping_ntile_98th: number | undefined;
jitter_histogram_negligible: number | undefined;
jitter_histogram_1: number | undefined;
jitter_histogram_2: number | undefined;
jitter_histogram_5: number | undefined;
jitter_histogram_10: number | undefined;
jitter_histogram_20: number | undefined;
txspeed_max: number | undefined;
txspeed_histogram_16: number | undefined;
txspeed_histogram_32: number | undefined;
txspeed_histogram_64: number | undefined;
txspeed_histogram_128: number | undefined;
txspeed_histogram_256: number | undefined;
txspeed_histogram_512: number | undefined;
txspeed_histogram_1024: number | undefined;
txspeed_histogram_max: number | undefined;
txspeed_ntile_5th: number | undefined;
txspeed_ntile_50th: number | undefined;
txspeed_ntile_75th: number | undefined;
txspeed_ntile_95th: number | undefined;
txspeed_ntile_98th: number | undefined;
rxspeed_max: number | undefined;
rxspeed_histogram_16: number | undefined;
rxspeed_histogram_32: number | undefined;
rxspeed_histogram_64: number | undefined;
rxspeed_histogram_128: number | undefined;
rxspeed_histogram_256: number | undefined;
rxspeed_histogram_512: number | undefined;
rxspeed_histogram_1024: number | undefined;
rxspeed_histogram_max: number | undefined;
rxspeed_ntile_5th: number | undefined;
rxspeed_ntile_50th: number | undefined;
rxspeed_ntile_75th: number | undefined;
rxspeed_ntile_95th: number | undefined;
rxspeed_ntile_98th: number | undefined;
}
export interface SteamDatagramConnectionQuality {
instantaneous: SteamDatagramLinkInstantaneousStats | undefined;
lifetime: SteamDatagramLinkLifetimeStats | undefined;
}
export interface SteamNetworkingICESessionSummary {
failure_reason_code: number | undefined;
local_candidate_types: number | undefined;
remote_candidate_types: number | undefined;
initial_route_kind: number | undefined;
initial_ping: number | undefined;
initial_score: number | undefined;
negotiation_ms: number | undefined;
best_route_kind: number | undefined;
best_ping: number | undefined;
best_score: number | undefined;
best_time: number | undefined;
selected_seconds: number | undefined;
user_settings: number | undefined;
ice_enable_var: number | undefined;
local_candidate_types_allowed: number | undefined;
}
export interface SteamNetworkingP2PSDRRoutingSummary {
initial_ping: number | undefined;
initial_ping_front_local: number | undefined;
initial_ping_front_remote: number | undefined;
initial_score: number | undefined;
initial_pop_local: number | undefined;
initial_pop_remote: number | undefined;
best_ping: number | undefined;
best_ping_front_local: number | undefined;
best_ping_front_remote: number | undefined;
best_score: number | undefined;
best_pop_local: number | undefined;
best_pop_remote: number | undefined;
best_time: number | undefined;
negotiation_ms: number | undefined;
selected_seconds: number | undefined;
}
export interface SteamDatagramP2PRoutingSummary {
ice: SteamNetworkingICESessionSummary | undefined;
sdr: SteamNetworkingP2PSDRRoutingSummary | undefined;
}
export interface CGameNetworkingUI_ConnectionState extends JsPbMessage {
connection_key(): string;
appid(): number;
connection_id_local(): number;
identity_local(): string;
identity_remote(): string;
connection_state(): number;
start_time(): number;
close_time(): number;
close_reason(): number;
close_message(): string;
status_loc_token(): string;
transport_kind(): number;
sdrpopid_local(): string;
sdrpopid_remote(): string;
address_remote(): string;
p2p_routing(): SteamDatagramP2PRoutingSummary;
ping_interior(): number;
ping_remote_front(): number;
ping_default_internet_route(): number;
e2e_quality_local(): SteamDatagramConnectionQuality;
e2e_quality_remote(): SteamDatagramConnectionQuality;
e2e_quality_remote_instantaneous_time(): string;
e2e_quality_remote_lifetime_time(): string;
front_quality_local(): SteamDatagramConnectionQuality;
front_quality_remote(): SteamDatagramConnectionQuality;
front_quality_remote_instantaneous_time(): string;
front_quality_remote_lifetime_time(): string;
}
export interface NetworkDevice_Wireless {
aps: WirelessAP[];
/**
* @remarks Not present if wired.
* @todo enum
*/
esecurity_supported?: number;
}
export interface WirelessAP {
esecurity: EWirelessSecurityFlags;
estrength: EWirelessEndpointStrength;
id: number;
is_active: boolean;
is_autoconnect: boolean;
password: string;
ssid: string;
strength_raw: number;
user_name?: string;
}
export enum EWirelessSecurityFlags {
None,
StaticWep = 1 << 0,
DynamicWep = 1 << 1,
Wpa = 1 << 2,
WpaEnterprise = 1 << 3,
Wpa2 = 1 << 4,
Wpa2Enterprise = 1 << 5,
/**
* Special value to indicate that this platform does not support
* the security methods required to connect to an access point
*/
Unsupported = 1 << 15,
}
export interface NetworkDevice_Wired {
friendly_name: string;
is_cable_present: boolean;
speed_mbit: number;
}
export interface NetworkDevice {
estate: ENetworkDeviceState;
etype: ENetworkDeviceType;
id: number;
ipv4: {
addresses: NetworkDeviceIPv4Address[];
};
ipv6: {
addresses: NetworkDeviceIPv6Address[];
};
mac: string;
product: string;
vendor: string;
/**
* @remarks Present only if wired.
*/
wired?: NetworkDevice_Wired;
/**
* @remarks Present even if wired.
*/
wireless: NetworkDevice_Wireless;
}
export interface NetworkDeviceIPv4Address {
ip: number;
netmask: number;
}
export interface NetworkDeviceIPv6Address {
ip: string;
}
export interface NetworkDeviceIP {
dns_ip: number[];
gateway_ip: number;
is_default_route: boolean;
is_dhcp_enabled: boolean;
is_enabled: boolean;
}
export enum ENetworkDeviceState {
NotPresent,
Failed,
Disconnected,
Disconnecting,
Connecting,
Connected,
Retrying,
}
export enum ENetworkDeviceType {
Unknown,
Wired,
Wireless,
Virtual,
}
export enum EWirelessEndpointStrength {
None,
Weak,
Ok,
Good,
Excellent,
}