@@ -4,18 +4,9 @@ import type { IncomingMessage } from 'http';
4
4
import type { NostrWSMessage , EnhancedWebSocket , NostrWSOptions } from './types/index.js' ;
5
5
import { NostrErrorType } from './types/errors.js' ;
6
6
import NostrWSErrorHandler from './error-handler.js' ;
7
- import ConnectionManager from './connection-manager.js' ;
7
+ import { ConnectionManager } from './connection-manager.js' ;
8
8
import { createDefaultLogger } from './logger.js' ;
9
9
10
- /**
11
- * Default message handlers that do nothing
12
- */
13
- const defaultHandlers : Required < NostrWSOptions [ 'handlers' ] > = {
14
- message : ( ) => Promise . resolve ( ) ,
15
- error : ( ) => { } ,
16
- close : ( ) => { } ,
17
- } ;
18
-
19
10
export class NostrWSServer extends EventEmitter {
20
11
private readonly wss : WebSocketServer ;
21
12
private readonly options : Required < NostrWSOptions > ;
@@ -24,13 +15,20 @@ export class NostrWSServer extends EventEmitter {
24
15
25
16
constructor ( options : NostrWSOptions = { } ) {
26
17
super ( ) ;
18
+
19
+ const defaultHandlers = {
20
+ message : ( ) => Promise . resolve ( ) ,
21
+ error : ( ) => { } ,
22
+ close : ( ) => { } ,
23
+ } as const ;
24
+
27
25
this . options = {
28
26
logger : options . logger || createDefaultLogger ( ) ,
29
27
heartbeatInterval : options . heartbeatInterval || 30000 ,
30
28
handlers : {
31
- message : options . handlers ?. message ?? defaultHandlers . message ,
32
- error : options . handlers ?. error ?? defaultHandlers . error ,
33
- close : options . handlers ?. close ?? defaultHandlers . close ,
29
+ message : options . handlers ?. message || defaultHandlers . message ,
30
+ error : options . handlers ?. error || defaultHandlers . error ,
31
+ close : options . handlers ?. close || defaultHandlers . close ,
34
32
} ,
35
33
autoReconnect : options . autoReconnect ?? true ,
36
34
maxReconnectAttempts : options . maxReconnectAttempts || 5 ,
@@ -73,25 +71,27 @@ export class NostrWSServer extends EventEmitter {
73
71
} ) ;
74
72
}
75
73
76
- private setupWebSocket ( ws : EnhancedWebSocket , request : IncomingMessage ) : void {
74
+ private setupWebSocket ( ws : EnhancedWebSocket & WebSocket , request : IncomingMessage ) : void {
77
75
ws . on ( 'message' , async ( data : Buffer ) => {
78
76
try {
79
77
const message = JSON . parse ( data . toString ( ) ) as NostrWSMessage ;
80
78
if ( ! Array . isArray ( message ) || message . length < 2 ) {
81
79
throw new Error ( 'Invalid message format' ) ;
82
80
}
83
- if ( this . options . handlers . message ) {
84
- await this . options . handlers . message ( ws , message ) ;
81
+ const messageHandler = this . options . handlers . message ;
82
+ if ( messageHandler ) {
83
+ await messageHandler ( ws , message ) ;
85
84
}
86
85
this . emit ( 'message' , ws , message ) ;
87
86
} catch ( error ) {
88
87
const wsError = this . errorHandler . handleMessageError (
89
88
error as Error ,
90
89
data . toString ( ) ,
91
- ws . id
90
+ ( ws as EnhancedWebSocket ) . id
92
91
) ;
93
- if ( this . options . handlers . error ) {
94
- this . options . handlers . error ( ws , wsError ) ;
92
+ const errorHandler = this . options . handlers . error ;
93
+ if ( errorHandler ) {
94
+ errorHandler ( ws , wsError ) ;
95
95
}
96
96
this . emit ( 'error' , ws , wsError ) ;
97
97
}
@@ -119,7 +119,7 @@ export class NostrWSServer extends EventEmitter {
119
119
120
120
public broadcast ( message : NostrWSMessage ) : void {
121
121
const connections = this . connectionManager . getConnections ( ) ;
122
- connections . forEach ( ( ws ) => {
122
+ connections . forEach ( ( ws : EnhancedWebSocket & WebSocket ) => {
123
123
try {
124
124
if ( ws . readyState === WebSocket . OPEN ) {
125
125
ws . send ( JSON . stringify ( message ) ) ;
@@ -137,7 +137,7 @@ export class NostrWSServer extends EventEmitter {
137
137
public close ( ) : Promise < void > {
138
138
return new Promise ( ( resolve ) => {
139
139
const connections = this . connectionManager . getConnections ( ) ;
140
- connections . forEach ( ( ws ) => {
140
+ connections . forEach ( ( ws : EnhancedWebSocket & WebSocket ) => {
141
141
try {
142
142
ws . close ( ) ;
143
143
} catch ( error ) {
0 commit comments