@@ -18,24 +18,27 @@ import type { RequestRuleData } from "../rules/requests/request-rule";
18
18
import type { WebSocketRuleData } from "../rules/websockets/websocket-rule" ;
19
19
20
20
import { deserializeRuleData , deserializeWebSocketRuleData } from "../rules/rule-deserialization" ;
21
-
22
- const REQUEST_INITIATED_TOPIC = 'request-initiated' ;
23
- const REQUEST_RECEIVED_TOPIC = 'request-received' ;
24
- const RESPONSE_COMPLETED_TOPIC = 'response-completed' ;
25
- const WEBSOCKET_REQUEST_TOPIC = 'websocket-request' ;
26
- const WEBSOCKET_ACCEPTED_TOPIC = 'websocket-accepted' ;
27
- const WEBSOCKET_MESSAGE_RECEIVED_TOPIC = 'websocket-message-received' ;
28
- const WEBSOCKET_MESSAGE_SENT_TOPIC = 'websocket-message-sent' ;
29
- const WEBSOCKET_CLOSE_TOPIC = 'websocket-close' ;
30
- const REQUEST_ABORTED_TOPIC = 'request-aborted' ;
31
- const TLS_PASSTHROUGH_OPENED_TOPIC = 'tls-passthrough-opened' ;
32
- const TLS_PASSTHROUGH_CLOSED_TOPIC = 'tls-passthrough-closed' ;
33
- const TLS_CLIENT_ERROR_TOPIC = 'tls-client-error' ;
34
- const CLIENT_ERROR_TOPIC = 'client-error' ;
35
- const RAW_PASSTHROUGH_OPENED_TOPIC = 'raw-passthrough-opened' ;
36
- const RAW_PASSTHROUGH_CLOSED_TOPIC = 'raw-passthrough-closed' ;
37
- const RAW_PASSTHROUGH_DATA_TOPIC = 'raw-passthrough-data' ;
38
- const RULE_EVENT_TOPIC = 'rule-event' ;
21
+ import { SubscribableEvent } from "../main" ;
22
+
23
+ const graphqlSubscriptionPairs = Object . entries ( {
24
+ 'requestInitiated' : 'request-initiated' ,
25
+ 'requestReceived' : 'request' ,
26
+ 'responseCompleted' : 'response' ,
27
+ 'webSocketRequest' : 'websocket-request' ,
28
+ 'webSocketAccepted' : 'websocket-accepted' ,
29
+ 'webSocketMessageReceived' : 'websocket-message-received' ,
30
+ 'webSocketMessageSent' : 'websocket-message-sent' ,
31
+ 'webSocketClose' : 'websocket-close' ,
32
+ 'requestAborted' : 'abort' ,
33
+ 'tlsPassthroughOpened' : 'tls-passthrough-opened' ,
34
+ 'tlsPassthroughClosed' : 'tls-passthrough-closed' ,
35
+ 'failedTlsRequest' : 'tls-client-error' ,
36
+ 'failedClientRequest' : 'client-error' ,
37
+ 'rawPassthroughOpened' : 'raw-passthrough-opened' ,
38
+ 'rawPassthroughClosed' : 'raw-passthrough-closed' ,
39
+ 'rawPassthroughData' : 'raw-passthrough-data' ,
40
+ 'ruleEvent' : 'rule-event'
41
+ } satisfies { [ key : string ] : SubscribableEvent } ) ;
39
42
40
43
async function buildMockedEndpointData ( endpoint : ServerMockedEndpoint ) : Promise < MockedEndpointData > {
41
44
return {
@@ -53,111 +56,17 @@ export function buildAdminServerModel(
53
56
) : IResolvers {
54
57
const pubsub = new PubSub ( ) ;
55
58
56
- mockServer . on ( 'request-initiated' , ( evt ) => {
57
- pubsub . publish ( REQUEST_INITIATED_TOPIC , {
58
- requestInitiated : evt
59
- } )
60
- } ) ;
61
-
62
- mockServer . on ( 'request' , ( evt ) => {
63
- pubsub . publish ( REQUEST_RECEIVED_TOPIC , {
64
- requestReceived : evt
65
- } )
66
- } ) ;
67
-
68
- mockServer . on ( 'response' , ( evt ) => {
69
- pubsub . publish ( RESPONSE_COMPLETED_TOPIC , {
70
- responseCompleted : evt
71
- } )
72
- } ) ;
73
-
74
- mockServer . on ( 'websocket-request' , ( evt ) => {
75
- pubsub . publish ( WEBSOCKET_REQUEST_TOPIC , {
76
- webSocketRequest : evt
77
- } )
78
- } ) ;
79
-
80
- mockServer . on ( 'websocket-accepted' , ( evt ) => {
81
- pubsub . publish ( WEBSOCKET_ACCEPTED_TOPIC , {
82
- webSocketAccepted : evt
83
- } )
84
- } ) ;
85
-
86
- mockServer . on ( 'websocket-message-received' , ( evt ) => {
87
- pubsub . publish ( WEBSOCKET_MESSAGE_RECEIVED_TOPIC , {
88
- webSocketMessageReceived : evt
89
- } )
90
- } ) ;
91
-
92
- mockServer . on ( 'websocket-message-sent' , ( evt ) => {
93
- pubsub . publish ( WEBSOCKET_MESSAGE_SENT_TOPIC , {
94
- webSocketMessageSent : evt
95
- } )
96
- } ) ;
97
-
98
- mockServer . on ( 'websocket-close' , ( evt ) => {
99
- pubsub . publish ( WEBSOCKET_CLOSE_TOPIC , {
100
- webSocketClose : evt
101
- } )
102
- } ) ;
103
-
104
- mockServer . on ( 'abort' , ( evt ) => {
105
- pubsub . publish ( REQUEST_ABORTED_TOPIC , {
106
- requestAborted : Object . assign ( evt , {
107
- // Backward compat: old clients expect this to be present. In future this can be
108
- // removed and abort events can lose the 'body' in the schema.
109
- body : Buffer . alloc ( 0 )
110
- } )
111
- } )
112
- } ) ;
59
+ for ( let [ gqlName , eventName ] of graphqlSubscriptionPairs ) {
60
+ mockServer . on ( eventName as any , ( evt ) => {
61
+ pubsub . publish ( eventName , { [ gqlName ] : evt } ) ;
62
+ } ) ;
63
+ }
113
64
114
- mockServer . on ( 'tls-passthrough-opened' , ( evt ) => {
115
- pubsub . publish ( TLS_PASSTHROUGH_OPENED_TOPIC , {
116
- tlsPassthroughOpened : evt
117
- } )
118
- } ) ;
119
-
120
- mockServer . on ( 'tls-passthrough-closed' , ( evt ) => {
121
- pubsub . publish ( TLS_PASSTHROUGH_CLOSED_TOPIC , {
122
- tlsPassthroughClosed : evt
123
- } )
124
- } ) ;
125
-
126
- mockServer . on ( 'tls-client-error' , ( evt ) => {
127
- pubsub . publish ( TLS_CLIENT_ERROR_TOPIC , {
128
- failedTlsRequest : evt
129
- } )
130
- } ) ;
131
-
132
- mockServer . on ( 'client-error' , ( evt ) => {
133
- pubsub . publish ( CLIENT_ERROR_TOPIC , {
134
- failedClientRequest : evt
135
- } )
136
- } ) ;
137
-
138
- mockServer . on ( 'raw-passthrough-opened' , ( evt ) => {
139
- pubsub . publish ( RAW_PASSTHROUGH_OPENED_TOPIC , {
140
- rawPassthroughOpened : evt
141
- } )
142
- } ) ;
143
-
144
- mockServer . on ( 'raw-passthrough-closed' , ( evt ) => {
145
- pubsub . publish ( RAW_PASSTHROUGH_CLOSED_TOPIC , {
146
- rawPassthroughClosed : evt
147
- } )
148
- } ) ;
149
-
150
- mockServer . on ( 'raw-passthrough-data' , ( evt ) => {
151
- pubsub . publish ( RAW_PASSTHROUGH_DATA_TOPIC , {
152
- rawPassthroughData : evt
153
- } )
154
- } ) ;
155
-
156
- mockServer . on ( 'rule-event' , ( evt ) => {
157
- pubsub . publish ( RULE_EVENT_TOPIC , {
158
- ruleEvent : evt
159
- } )
160
- } ) ;
65
+ const subscriptionResolvers = Object . fromEntries ( graphqlSubscriptionPairs . map ( ( [ gqlName , eventName ] ) => ( [
66
+ gqlName , {
67
+ subscribe : ( ) => pubsub . asyncIterator ( eventName )
68
+ }
69
+ ] ) ) ) ;
161
70
162
71
return {
163
72
Query : {
@@ -218,59 +127,7 @@ export function buildAdminServerModel(
218
127
}
219
128
} ,
220
129
221
- Subscription : {
222
- requestInitiated : {
223
- subscribe : ( ) => pubsub . asyncIterator ( REQUEST_INITIATED_TOPIC )
224
- } ,
225
- requestReceived : {
226
- subscribe : ( ) => pubsub . asyncIterator ( REQUEST_RECEIVED_TOPIC )
227
- } ,
228
- responseCompleted : {
229
- subscribe : ( ) => pubsub . asyncIterator ( RESPONSE_COMPLETED_TOPIC )
230
- } ,
231
- webSocketRequest : {
232
- subscribe : ( ) => pubsub . asyncIterator ( WEBSOCKET_REQUEST_TOPIC )
233
- } ,
234
- webSocketAccepted : {
235
- subscribe : ( ) => pubsub . asyncIterator ( WEBSOCKET_ACCEPTED_TOPIC )
236
- } ,
237
- webSocketMessageReceived : {
238
- subscribe : ( ) => pubsub . asyncIterator ( WEBSOCKET_MESSAGE_RECEIVED_TOPIC )
239
- } ,
240
- webSocketMessageSent : {
241
- subscribe : ( ) => pubsub . asyncIterator ( WEBSOCKET_MESSAGE_SENT_TOPIC )
242
- } ,
243
- webSocketClose : {
244
- subscribe : ( ) => pubsub . asyncIterator ( WEBSOCKET_CLOSE_TOPIC )
245
- } ,
246
- requestAborted : {
247
- subscribe : ( ) => pubsub . asyncIterator ( REQUEST_ABORTED_TOPIC )
248
- } ,
249
- tlsPassthroughOpened : {
250
- subscribe : ( ) => pubsub . asyncIterator ( TLS_PASSTHROUGH_OPENED_TOPIC )
251
- } ,
252
- tlsPassthroughClosed : {
253
- subscribe : ( ) => pubsub . asyncIterator ( TLS_PASSTHROUGH_CLOSED_TOPIC )
254
- } ,
255
- failedTlsRequest : {
256
- subscribe : ( ) => pubsub . asyncIterator ( TLS_CLIENT_ERROR_TOPIC )
257
- } ,
258
- failedClientRequest : {
259
- subscribe : ( ) => pubsub . asyncIterator ( CLIENT_ERROR_TOPIC )
260
- } ,
261
- rawPassthroughOpened : {
262
- subscribe : ( ) => pubsub . asyncIterator ( RAW_PASSTHROUGH_OPENED_TOPIC )
263
- } ,
264
- rawPassthroughClosed : {
265
- subscribe : ( ) => pubsub . asyncIterator ( RAW_PASSTHROUGH_CLOSED_TOPIC )
266
- } ,
267
- rawPassthroughData : {
268
- subscribe : ( ) => pubsub . asyncIterator ( RAW_PASSTHROUGH_DATA_TOPIC )
269
- } ,
270
- ruleEvent : {
271
- subscribe : ( ) => pubsub . asyncIterator ( RULE_EVENT_TOPIC )
272
- }
273
- } ,
130
+ Subscription : subscriptionResolvers ,
274
131
275
132
Request : {
276
133
body : ( request : CompletedRequest ) => {
0 commit comments