in src/connection-pool.ts [90:137]
public getMetadata(): Promise<grpc.Metadata> {
if (this.awaitingMetadata !== null) {
return this.awaitingMetadata;
}
const hosts =
typeof this.options.hosts === 'string' ? [this.options.hosts] : this.options.hosts;
const auth = this.options.auth;
if (!auth) {
return Promise.resolve(new grpc.Metadata());
}
const attempt = (index: number, previousRejection?: Error): Promise<grpc.Metadata> => {
if (index >= hosts.length) {
this.awaitingMetadata = null;
return Promise.reject(previousRejection);
}
const meta = new grpc.Metadata();
const host = removeProtocolPrefix(hosts[index]);
const context: CallContext = {
method: 'authenticate',
params: { name: auth.username, password: auth.password },
service: 'Auth',
isStream: false,
};
return this.getCredentialsFromHost(
host,
auth.username,
auth.password,
resolveCallOptions(
resolveCallOptions(undefined, auth.callOptions, context),
resolveCallOptions(undefined, this.options.defaultCallOptions, context),
context,
),
this.credentials,
)
.then(token => {
meta.set('token', token);
return meta;
})
.catch(err => attempt(index + 1, err));
};
return (this.awaitingMetadata = attempt(0));
}