Skip to content

Commit 9948aea

Browse files
committed
grpc-js: Ensure server interceptors work with builder utility classes
1 parent 649412f commit 9948aea

File tree

2 files changed

+33
-22
lines changed

2 files changed

+33
-22
lines changed

packages/grpc-js/src/server-interceptors.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,12 @@ export class ServerInterceptingCall implements ServerInterceptingCallInterface {
345345
private nextCall: ServerInterceptingCallInterface,
346346
responder?: Responder
347347
) {
348-
this.responder = { ...defaultResponder, ...responder };
348+
this.responder = {
349+
start: responder?.start ?? defaultResponder.start,
350+
sendMetadata: responder?.sendMetadata ?? defaultResponder.sendMetadata,
351+
sendMessage: responder?.sendMessage ?? defaultResponder.sendMessage,
352+
sendStatus: responder?.sendStatus ?? defaultResponder.sendStatus,
353+
};
349354
}
350355

351356
private processPendingMessage() {
@@ -369,8 +374,17 @@ export class ServerInterceptingCall implements ServerInterceptingCallInterface {
369374
start(listener: InterceptingServerListener): void {
370375
this.responder.start(interceptedListener => {
371376
const fullInterceptedListener: FullServerListener = {
372-
...defaultServerListener,
373-
...interceptedListener,
377+
onReceiveMetadata:
378+
interceptedListener?.onReceiveMetadata ??
379+
defaultServerListener.onReceiveMetadata,
380+
onReceiveMessage:
381+
interceptedListener?.onReceiveMessage ??
382+
defaultServerListener.onReceiveMessage,
383+
onReceiveHalfClose:
384+
interceptedListener?.onReceiveHalfClose ??
385+
defaultServerListener.onReceiveHalfClose,
386+
onCancel:
387+
interceptedListener?.onCancel ?? defaultServerListener.onCancel,
374388
};
375389
const finalInterceptingListener = new InterceptingServerListenerImpl(
376390
fullInterceptedListener,

packages/grpc-js/test/test-server-interceptors.ts

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,22 @@ const testAuthInterceptor: grpc.ServerInterceptor = (
3030
methodDescriptor,
3131
call
3232
) => {
33-
return new grpc.ServerInterceptingCall(call, {
34-
start: next => {
35-
const authListener: grpc.ServerListener = {
36-
onReceiveMetadata: (metadata, mdNext) => {
37-
if (
38-
metadata.get(AUTH_HEADER_KEY)?.[0] !== AUTH_HEADER_ALLOWED_VALUE
39-
) {
40-
call.sendStatus({
41-
code: grpc.status.UNAUTHENTICATED,
42-
details: 'Auth metadata not correct',
43-
});
44-
} else {
45-
mdNext(metadata);
46-
}
47-
},
48-
};
49-
next(authListener);
50-
},
51-
});
33+
const authListener = (new grpc.ServerListenerBuilder())
34+
.withOnReceiveMetadata((metadata, mdNext) => {
35+
if (
36+
metadata.get(AUTH_HEADER_KEY)?.[0] !== AUTH_HEADER_ALLOWED_VALUE
37+
) {
38+
call.sendStatus({
39+
code: grpc.status.UNAUTHENTICATED,
40+
details: 'Auth metadata not correct',
41+
});
42+
} else {
43+
mdNext(metadata);
44+
}
45+
}).build();
46+
const responder = (new grpc.ResponderBuilder())
47+
.withStart(next => next(authListener)).build();
48+
return new grpc.ServerInterceptingCall(call, responder);
5249
};
5350

5451
let eventCounts = {

0 commit comments

Comments
 (0)