Skip to content

Commit 13f26e2

Browse files
allow setting gRPC metadata
1 parent 0369db1 commit 13f26e2

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

packages/common/src/grpc-service.js

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ var GRPC_ERROR_CODE_TO_HTTP = {
138138
*
139139
* @param {object} config - Configuration object.
140140
* @param {string} config.baseUrl - The base URL to make API requests to.
141+
* @param {object} config.grpcMetadata - Metadata to send with every request.
141142
* @param {string[]} config.scopes - The scopes required for the request.
142143
* @param {string} config.service - The name of the service.
143144
* @param {object=} config.protoServices - Directly provide the required proto
@@ -185,6 +186,12 @@ function GrpcService(config, options) {
185186
service.baseUrl = protoConfig.baseUrl;
186187
}
187188
});
189+
190+
this.callCredentials = [];
191+
192+
if (config.grpcMetadata) {
193+
this.setGrpcMetadata_(config.grpcMetadata);
194+
}
188195
}
189196

190197
nodeutil.inherits(GrpcService, Service);
@@ -646,18 +653,27 @@ GrpcService.structToObj_ = function(struct) {
646653
* @param {?error} callback.err - An error getting an auth client.
647654
*/
648655
GrpcService.prototype.getGrpcCredentials_ = function(callback) {
656+
var self = this;
657+
649658
this.authClient.getAuthClient(function(err, authClient) {
650659
if (err) {
651660
callback(err);
652661
return;
653662
}
654663

655-
var credentials = grpc.credentials.combineChannelCredentials(
664+
var callCredentialObjects = [
656665
grpc.credentials.createSsl(),
657666
grpc.credentials.createFromGoogleCredential(authClient)
667+
];
668+
669+
callCredentialObjects = callCredentialObjects.concat(self.callCredentials);
670+
671+
var grpcCredentials = grpc.credentials.combineChannelCredentials.apply(
672+
null,
673+
callCredentialObjects
658674
);
659675

660-
callback(null, credentials);
676+
callback(null, grpcCredentials);
661677
});
662678
};
663679

@@ -728,5 +744,19 @@ GrpcService.prototype.getService_ = function(protoOpts) {
728744
return service;
729745
};
730746

747+
GrpcService.prototype.setGrpcMetadata_ = function(metadata) {
748+
var cc = grpc.credentials.createFromMetadataGenerator(function(_, cb) {
749+
var grpcMetadata = new grpc.Metadata();
750+
751+
for (var prop in metadata) {
752+
grpcMetadata.add(prop, metadata[prop]);
753+
}
754+
755+
cb(null, grpcMetadata);
756+
});
757+
758+
this.callCredentials.push(cc);
759+
};
760+
731761
module.exports = GrpcService;
732762
module.exports.GRPC_ERROR_CODE_TO_HTTP = GRPC_ERROR_CODE_TO_HTTP;

0 commit comments

Comments
 (0)