Skip to content

Commit 975f506

Browse files
allow setting gRPC metadata
1 parent 4f8d74a commit 975f506

1 file changed

Lines changed: 32 additions & 2 deletions

File tree

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);
@@ -635,18 +642,27 @@ GrpcService.structToObj_ = function(struct) {
635642
* @param {?error} callback.err - An error getting an auth client.
636643
*/
637644
GrpcService.prototype.getGrpcCredentials_ = function(callback) {
645+
var self = this;
646+
638647
this.authClient.getAuthClient(function(err, authClient) {
639648
if (err) {
640649
callback(err);
641650
return;
642651
}
643652

644-
var credentials = grpc.credentials.combineChannelCredentials(
653+
var callCredentialObjects = [
645654
grpc.credentials.createSsl(),
646655
grpc.credentials.createFromGoogleCredential(authClient)
656+
];
657+
658+
callCredentialObjects = callCredentialObjects.concat(self.callCredentials);
659+
660+
var grpcCredentials = grpc.credentials.combineChannelCredentials.apply(
661+
null,
662+
callCredentialObjects
647663
);
648664

649-
callback(null, credentials);
665+
callback(null, grpcCredentials);
650666
});
651667
};
652668

@@ -717,5 +733,19 @@ GrpcService.prototype.getService_ = function(protoOpts) {
717733
return service;
718734
};
719735

736+
GrpcService.prototype.setGrpcMetadata_ = function(metadata) {
737+
var cc = grpc.credentials.createFromMetadataGenerator(function(_, cb) {
738+
var grpcMetadata = new grpc.Metadata();
739+
740+
for (var prop in metadata) {
741+
grpcMetadata.add(prop, metadata[prop]);
742+
}
743+
744+
cb(null, grpcMetadata);
745+
});
746+
747+
this.callCredentials.push(cc);
748+
};
749+
720750
module.exports = GrpcService;
721751
module.exports.GRPC_ERROR_CODE_TO_HTTP = GRPC_ERROR_CODE_TO_HTTP;

0 commit comments

Comments
 (0)