1+ import { WebSocketIncomingMessage } from '../types/websocket' ;
2+
3+ interface Alarm {
4+ name : string ;
5+ scheduledTime : number ;
6+ periodInMinutes ?: number ;
7+ }
8+
19export class LocalWebSocketClient {
210 private ws : WebSocket ;
311 public connected : Promise < this> ;
412 private resolveConnected ! : ( value : this) => void ;
5- private rejectConnected ! : ( reason ?: any ) => void ;
6- private messageListeners : Array < ( msg : any ) => void > = [ ] ;
13+ private rejectConnected ! : ( reason ?: Event | Error | string ) => void ;
14+ private messageListeners : Array < ( msg : WebSocketIncomingMessage ) => void > = [ ] ;
715
816 constructor ( auth : string , port : number ) {
917 const wsUrl = `ws://localhost:${ port } ` ;
10- this . connected = new Promise ( ( ) => { } ) ; // Appease the Typescript gods
18+ this . connected = new Promise ( ( ) => void ( 0 ) ) ; // Appease the Typescript gods
1119 this . _prepareConnection ( ) ;
1220 try {
1321 this . ws = new WebSocket ( wsUrl ) ;
1422 } catch ( err ) {
15- this . rejectConnected ( err ) ;
23+ this . rejectConnected ( err as Error ) ;
1624 throw err ;
1725 }
1826 this . ws . onopen = async ( ) => {
@@ -23,7 +31,7 @@ export class LocalWebSocketClient {
2331
2432 ( async function ( socket : LocalWebSocketClient ) {
2533
26- async function keepGoingAlarm ( alarm : any ) {
34+ async function keepGoingAlarm ( alarm : Alarm ) {
2735 if ( alarm . name !== 'KeepWebsocketAlive' ) return ;
2836 console . debug ( 'Websocket keepAlive PING' ) ;
2937
@@ -69,31 +77,31 @@ export class LocalWebSocketClient {
6977 chrome . alarms . clear ( 'KeepWebsocketAlive' )
7078 } ;
7179
72- this . ws . onmessage = ( event ) => {
80+ this . ws . onmessage = ( event : MessageEvent ) => {
7381 try {
74- const data = JSON . parse ( event . data ) ;
82+ const data : { method : string ; token : string } = JSON . parse ( event . data ) ;
7583 if ( data . method !== 'auth' || data . token !== auth [ 1 ] ) {
7684 console . error ( 'WebSocket authentication failed' , data . method , port ) ; // Not mentioning the auth purposefully
7785 this . rejectConnected ( 'Server Auth failed' ) ;
7886 this . ws . close ( ) ;
7987 }
8088
81- this . ws . onmessage = ( event ) => {
82- let msg = event . data ;
89+ this . ws . onmessage = ( event : MessageEvent ) => {
90+ let msg : string | WebSocketIncomingMessage = event . data ;
8391 try {
84- msg = JSON . parse ( event . data ) ;
92+ msg = JSON . parse ( event . data ) as WebSocketIncomingMessage ;
8593 } catch { }
8694 if ( data . method === 'ping' ) {
8795 console . debug ( 'pong!' ) ;
8896 return this . ws . send ( JSON . stringify ( { method : 'pong' } ) ) ;
8997 }
90- this . messageListeners . forEach ( fn => fn ( msg ) ) ;
98+ this . messageListeners . forEach ( fn => fn ( msg as WebSocketIncomingMessage ) ) ;
9199 } ;
92100 this . ws . send ( JSON . stringify ( { method : 'authOK' } ) ) ;
93101 this . resolveConnected ( this ) ;
94102 console . log ( 'Ready for messaging:' ) ;
95103 } catch ( e ) {
96- this . rejectConnected ( e ) ;
104+ this . rejectConnected ( e as Error ) ;
97105 throw e ;
98106 }
99107 } ;
@@ -128,11 +136,11 @@ export class LocalWebSocketClient {
128136 }
129137
130138
131- public listen ( listener : ( msg : any ) => void ) {
139+ public listen ( listener : ( msg : WebSocketIncomingMessage ) => void ) {
132140 this . messageListeners . push ( listener ) ;
133141 }
134142
135- public send ( msg : any ) {
143+ public send ( msg : string | Record < string , unknown > ) {
136144 if ( this . ws . readyState == WebSocket . OPEN ) {
137145 this . ws . send ( typeof msg === 'string' ? msg : JSON . stringify ( msg ) ) ;
138146 } else {
0 commit comments