diff --git a/src/node/index.js b/src/node/index.js index 875756328d7..c09e416c6ed 100644 --- a/src/node/index.js +++ b/src/node/index.js @@ -100,22 +100,23 @@ function load(filename, format) { function getGoogleAuthDelegate(credential) { /** * Update a metadata object with authentication information. + * @param {string} authURI The uri to authenticate to * @param {Object} metadata Metadata object * @param {function(Error, Object)} callback */ - return function updateMetadata(metadata, callback) { + return function updateMetadata(authURI, metadata, callback) { metadata = _.clone(metadata); if (metadata.Authorization) { metadata.Authorization = _.clone(metadata.Authorization); } else { metadata.Authorization = []; } - credential.getAccessToken(function(err, token) { + credential.getRequestMetadata(authURI, function(err, header) { if (err) { callback(err); return; } - metadata.Authorization.push('Bearer ' + token); + metadata.Authorization.push(header.Authorization); callback(null, metadata); }); }; diff --git a/src/node/src/client.js b/src/node/src/client.js index 9f3ddf8ed04..707a2d99d8d 100644 --- a/src/node/src/client.js +++ b/src/node/src/client.js @@ -485,27 +485,28 @@ var requester_makers = { * requestSerialize: function to serialize request objects * responseDeserialize: function to deserialize response objects * @param {Object} methods An object mapping method names to method attributes + * @param {string} serviceName The name of the service * @return {function(string, Object)} New client constructor */ -function makeClientConstructor(methods) { +function makeClientConstructor(methods, serviceName) { /** * Create a client with the given methods * @constructor * @param {string} address The address of the server to connect to * @param {Object} options Options to pass to the underlying channel - * @param {function(Object, function)=} updateMetadata function to update the - * metadata for each request + * @param {function(string, Object, function)=} updateMetadata function to + * update the metadata for each request */ function Client(address, options, updateMetadata) { - if (updateMetadata) { - this.updateMetadata = updateMetadata; - } else { - this.updateMetadata = function(metadata, callback) { + if (!updateMetadata) { + updateMetadata = function(uri, metadata, callback) { callback(null, metadata); }; } - this.server_address = address; + this.server_address = address.replace(/\/$/, ''); this.channel = new grpc.Channel(address, options); + this.updateMetadata = _.partial(updateMetadata, + this.server_address + '/' + serviceName); } _.each(methods, function(attrs, name) { @@ -541,7 +542,7 @@ function makeClientConstructor(methods) { * @return {function(string, Object)} New client constructor */ function makeProtobufClientConstructor(service) { - var method_attrs = common.getProtobufServiceAttrs(service); + var method_attrs = common.getProtobufServiceAttrs(service, service.name); var Client = makeClientConstructor(method_attrs); Client.service = service;