@@ -13,11 +13,13 @@ const MIME = `text/event-stream`;
1313const LAST_ID = `Last-Event-ID` ;
1414const defaultChannel = `message` ;
1515const HTTP_OK = 200 ;
16+ const HTTP_PROBLEM = 400 ;
1617
17- // fields
18+ // SSE fields
1819const DATA = `data` ;
1920const ID = `id` ;
2021const EVENT = `event` ;
22+ const RETRY = `retry` ;
2123
2224const RECONNECT = Symbol ( ) ;
2325const CONNECT = Symbol ( ) ;
@@ -70,14 +72,16 @@ const isValidRequestForServerSentEvents = (request) => {
7072
7173
7274const createEventStream = ( options ) => {
73- const { path , server, asMiddleWare } = options ;
75+ const { condition , server, asMiddleWare, reconnectionTime = 10 ** 4 } = options ;
7476 const eventStream = Emitter ( { lastEventId : 0 } ) ;
7577
7678 let responses = [ ] ;
7779 let onRequest ;
7880
7981 const requestHandler = ( request , response ) => {
8082 if ( ! isValidRequestForServerSentEvents ( request ) ) {
83+ response . writeHead ( HTTP_PROBLEM ) ;
84+ response . end ( ) ;
8185 return false ;
8286 }
8387
@@ -98,6 +102,8 @@ const createEventStream = (options) => {
98102 lastId,
99103 response,
100104 } ) ;
105+ } else {
106+ response . write ( `${ RETRY } : ${ reconnectionTime } \n\n` )
101107 }
102108
103109 socket . once ( `close` , ( ) => {
@@ -145,11 +151,9 @@ const createEventStream = (options) => {
145151 } ;
146152 } else {
147153 onRequest = ( request , response ) => {
148- const requestPath = request . url ;
149- if ( requestPath !== path ) {
150- return ;
154+ if ( condition ( request ) ) {
155+ requestHandler ( request , response , responses ) ;
151156 }
152- requestHandler ( request , response , responses ) ;
153157 } ;
154158 server . on ( `request` , onRequest ) ;
155159 }
0 commit comments