11import { randomUUID } from "node:crypto" ;
2- import { EventEmitter } from "node:events" ;
32import net from "node:net" ;
43import path from "node:path" ;
54import { logger } from "../../utils/logger" ;
5+ import { TypedEventEmitter } from "../../utils/typed-event-emitter" ;
66
77const log = logger . scope ( "discord-ipc" ) ;
88
@@ -29,9 +29,10 @@ export interface DiscordActivity {
2929 instance ?: boolean ;
3030}
3131
32+ /** Event → payload map for {@link TypedEventEmitter}. Both are payload-less. */
3233interface DiscordIpcClientEvents {
33- ready : ( ) => void ;
34- disconnect : ( ) => void ;
34+ ready : undefined ;
35+ disconnect : undefined ;
3536}
3637
3738/**
@@ -44,7 +45,7 @@ interface DiscordIpcClientEvents {
4445 * It performs no reconnection of its own; the owning service decides when to
4546 * retry so the policy lives in one place.
4647 */
47- export class DiscordIpcClient extends EventEmitter {
48+ export class DiscordIpcClient extends TypedEventEmitter < DiscordIpcClientEvents > {
4849 private socket : net . Socket | null = null ;
4950 private readBuffer = Buffer . alloc ( 0 ) ;
5051 private ready = false ;
@@ -53,17 +54,6 @@ export class DiscordIpcClient extends EventEmitter {
5354 super ( ) ;
5455 }
5556
56- override on < K extends keyof DiscordIpcClientEvents > (
57- event : K ,
58- listener : DiscordIpcClientEvents [ K ] ,
59- ) : this {
60- return super . on ( event , listener ) ;
61- }
62-
63- override emit < K extends keyof DiscordIpcClientEvents > ( event : K ) : boolean {
64- return super . emit ( event ) ;
65- }
66-
6757 isReady ( ) : boolean {
6858 return this . ready ;
6959 }
@@ -101,7 +91,7 @@ export class DiscordIpcClient extends EventEmitter {
10191 private tryConnect ( paths : string [ ] , index : number ) : void {
10292 if ( index >= paths . length ) {
10393 log . debug ( "No reachable Discord IPC socket" ) ;
104- super . emit ( "disconnect" ) ;
94+ this . emit ( "disconnect" , undefined ) ;
10595 return ;
10696 }
10797
@@ -179,7 +169,7 @@ export class DiscordIpcClient extends EventEmitter {
179169 if ( msg ?. cmd === "DISPATCH" && msg . evt === "READY" ) {
180170 this . ready = true ;
181171 log . info ( "Discord IPC handshake complete" ) ;
182- super . emit ( "ready" ) ;
172+ this . emit ( "ready" , undefined ) ;
183173 }
184174 }
185175 }
@@ -194,7 +184,7 @@ export class DiscordIpcClient extends EventEmitter {
194184 // best effort
195185 }
196186 this . socket = null ;
197- super . emit ( "disconnect" ) ;
187+ this . emit ( "disconnect" , undefined ) ;
198188 }
199189
200190 private write ( op : number , payload : unknown ) : void {
0 commit comments