diff --git a/packages/grpc-js/package.json b/packages/grpc-js/package.json index 6b84fd9e..638c1920 100644 --- a/packages/grpc-js/package.json +++ b/packages/grpc-js/package.json @@ -1,6 +1,6 @@ { "name": "@grpc/grpc-js", - "version": "1.2.7", + "version": "1.2.8", "description": "gRPC Library for Node - pure JS implementation", "homepage": "https://grpc.io/", "repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js", diff --git a/packages/grpc-js/src/call-credentials-filter.ts b/packages/grpc-js/src/call-credentials-filter.ts index 5263d97f..53bdba2f 100644 --- a/packages/grpc-js/src/call-credentials-filter.ts +++ b/packages/grpc-js/src/call-credentials-filter.ts @@ -21,6 +21,7 @@ import { BaseFilter, Filter, FilterFactory } from './filter'; import { Metadata } from './metadata'; import { Status } from './constants'; import { splitHostPort } from './uri-parser'; +import { ServiceError } from './call'; export class CallCredentialsFilter extends BaseFilter implements Filter { private serviceUrl: string; @@ -51,12 +52,21 @@ export class CallCredentialsFilter extends BaseFilter implements Filter { service_url: this.serviceUrl, }); const resultMetadata = await metadata; - resultMetadata.merge(await credsMetadata); + try { + resultMetadata.merge(await credsMetadata); + } catch (error) { + this.stream.cancelWithStatus( + Status.UNAUTHENTICATED, + `Failed to retrieve auth metadata with error: ${error.message}` + ); + return Promise.reject('Failed to retrieve auth metadata'); + } if (resultMetadata.get('authorization').length > 1) { this.stream.cancelWithStatus( Status.INTERNAL, '"authorization" metadata cannot have multiple values' ); + return Promise.reject('"authorization" metadata cannot have multiple values'); } return resultMetadata; } diff --git a/packages/grpc-js/src/channel.ts b/packages/grpc-js/src/channel.ts index ad24876e..0f055d1e 100644 --- a/packages/grpc-js/src/channel.ts +++ b/packages/grpc-js/src/channel.ts @@ -384,7 +384,7 @@ export class ChannelImplementation implements Channel { (error: Error & { code: number }) => { // We assume the error code isn't 0 (Status.OK) callStream.cancelWithStatus( - error.code || Status.UNKNOWN, + (typeof error.code === 'number') ? error.code : Status.UNKNOWN, `Getting metadata from plugin failed with error: ${error.message}` ); }