4
4
import { HTTP , CloudEvent } from "cloudevents" ;
5
5
import { IncomingMessage , ServerResponse } from "http" ;
6
6
import { URL } from "url" ;
7
-
7
+ import { logger } from "./logger" ;
8
8
import * as utils from "./utils" ;
9
9
10
10
import {
@@ -14,9 +14,9 @@ import {
14
14
DisconnectedRequest ,
15
15
ConnectedRequest ,
16
16
ConnectionContext ,
17
- WebPubSubEventHandlerOptions ,
18
17
ConnectResponseHandler ,
19
- UserEventResponseHandler
18
+ UserEventResponseHandler ,
19
+ WebPubSubEventHandlerOptions
20
20
} from "./cloudEventsProtocols" ;
21
21
22
22
enum EventType {
@@ -137,24 +137,27 @@ function tryGetWebPubSubEvent(req: IncomingMessage): EventType | undefined {
137
137
}
138
138
}
139
139
140
+ function isWebPubSubRequest ( req : IncomingMessage ) : boolean {
141
+ return utils . getHttpHeader ( req , "ce-awpsversion" ) !== undefined ;
142
+ }
143
+
140
144
/**
141
145
* @internal
142
146
*/
143
147
export class CloudEventsDispatcher {
144
- private readonly _dumpRequest : boolean ;
145
- private readonly _allowedOrigins : string [ ] ;
146
- constructor (
147
- private hub : string ,
148
- allowedEndpoints : string [ ] ,
149
- private eventHandler ?: WebPubSubEventHandlerOptions
150
- ) {
151
- this . _dumpRequest = eventHandler ?. dumpRequest ?? false ;
152
- this . _allowedOrigins = allowedEndpoints . map ( ( endpoint ) =>
153
- endpoint === "*" ? "*" : new URL ( endpoint ) . host
154
- ) ;
148
+ private readonly _allowedOrigins = [ "*" ] ;
149
+ constructor ( private hub : string , private eventHandler ?: WebPubSubEventHandlerOptions ) {
150
+ if ( eventHandler ?. allowedEndpoints !== undefined ) {
151
+ this . _allowedOrigins = eventHandler . allowedEndpoints . map ( ( endpoint ) =>
152
+ endpoint === "*" ? "*" : new URL ( endpoint ) . host
153
+ ) ;
154
+ }
155
155
}
156
156
157
- public processValidateRequest ( req : IncomingMessage , res : ServerResponse ) : boolean {
157
+ public handlePreflight ( req : IncomingMessage , res : ServerResponse ) : boolean {
158
+ if ( ! isWebPubSubRequest ( req ) ) {
159
+ return false ;
160
+ }
158
161
if ( req . headers [ "webhook-request-origin" ] ) {
159
162
res . setHeader ( "WebHook-Allowed-Origin" , this . _allowedOrigins ) ;
160
163
res . end ( ) ;
@@ -164,10 +167,11 @@ export class CloudEventsDispatcher {
164
167
}
165
168
}
166
169
167
- public async processRequest (
168
- request : IncomingMessage ,
169
- response : ServerResponse
170
- ) : Promise < boolean > {
170
+ public async handleRequest ( request : IncomingMessage , response : ServerResponse ) : Promise < boolean > {
171
+ if ( ! isWebPubSubRequest ( request ) ) {
172
+ return false ;
173
+ }
174
+
171
175
// check if it is a valid WebPubSub cloud events
172
176
const origin = utils . getHttpHeader ( request , "webhook-request-origin" ) ;
173
177
if ( origin === undefined ) {
@@ -213,16 +217,14 @@ export class CloudEventsDispatcher {
213
217
}
214
218
break ;
215
219
default :
216
- console . warn ( `Unknown EventType ${ eventType } ` ) ;
220
+ logger . warning ( `Unknown EventType ${ eventType } ` ) ;
217
221
return false ;
218
222
}
219
223
220
224
const eventRequest = await utils . convertHttpToEvent ( request ) ;
221
225
const receivedEvent = HTTP . toEvent ( eventRequest ) ;
222
226
223
- if ( this . _dumpRequest ) {
224
- console . log ( receivedEvent ) ;
225
- }
227
+ logger . verbose ( receivedEvent ) ;
226
228
227
229
switch ( eventType ) {
228
230
case EventType . Connect : {
@@ -277,7 +279,7 @@ export class CloudEventsDispatcher {
277
279
return true ;
278
280
}
279
281
default :
280
- console . warn ( `Unknown EventType ${ eventType } ` ) ;
282
+ logger . warning ( `Unknown EventType ${ eventType } ` ) ;
281
283
return false ;
282
284
}
283
285
}
0 commit comments