|
"use strict"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.CallCredentials = void 0; |
|
const metadata_1 = require("./metadata"); |
|
function isCurrentOauth2Client(client) { |
|
return ('getRequestHeaders' in client && |
|
typeof client.getRequestHeaders === 'function'); |
|
} |
|
|
|
|
|
|
|
|
|
class CallCredentials { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static createFromMetadataGenerator(metadataGenerator) { |
|
return new SingleCallCredentials(metadataGenerator); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
static createFromGoogleCredential(googleCredentials) { |
|
return CallCredentials.createFromMetadataGenerator((options, callback) => { |
|
let getHeaders; |
|
if (isCurrentOauth2Client(googleCredentials)) { |
|
getHeaders = googleCredentials.getRequestHeaders(options.service_url); |
|
} |
|
else { |
|
getHeaders = new Promise((resolve, reject) => { |
|
googleCredentials.getRequestMetadata(options.service_url, (err, headers) => { |
|
if (err) { |
|
reject(err); |
|
return; |
|
} |
|
if (!headers) { |
|
reject(new Error('Headers not set by metadata plugin')); |
|
return; |
|
} |
|
resolve(headers); |
|
}); |
|
}); |
|
} |
|
getHeaders.then(headers => { |
|
const metadata = new metadata_1.Metadata(); |
|
for (const key of Object.keys(headers)) { |
|
metadata.add(key, headers[key]); |
|
} |
|
callback(null, metadata); |
|
}, err => { |
|
callback(err); |
|
}); |
|
}); |
|
} |
|
static createEmpty() { |
|
return new EmptyCallCredentials(); |
|
} |
|
} |
|
exports.CallCredentials = CallCredentials; |
|
class ComposedCallCredentials extends CallCredentials { |
|
constructor(creds) { |
|
super(); |
|
this.creds = creds; |
|
} |
|
async generateMetadata(options) { |
|
const base = new metadata_1.Metadata(); |
|
const generated = await Promise.all(this.creds.map(cred => cred.generateMetadata(options))); |
|
for (const gen of generated) { |
|
base.merge(gen); |
|
} |
|
return base; |
|
} |
|
compose(other) { |
|
return new ComposedCallCredentials(this.creds.concat([other])); |
|
} |
|
_equals(other) { |
|
if (this === other) { |
|
return true; |
|
} |
|
if (other instanceof ComposedCallCredentials) { |
|
return this.creds.every((value, index) => value._equals(other.creds[index])); |
|
} |
|
else { |
|
return false; |
|
} |
|
} |
|
} |
|
class SingleCallCredentials extends CallCredentials { |
|
constructor(metadataGenerator) { |
|
super(); |
|
this.metadataGenerator = metadataGenerator; |
|
} |
|
generateMetadata(options) { |
|
return new Promise((resolve, reject) => { |
|
this.metadataGenerator(options, (err, metadata) => { |
|
if (metadata !== undefined) { |
|
resolve(metadata); |
|
} |
|
else { |
|
reject(err); |
|
} |
|
}); |
|
}); |
|
} |
|
compose(other) { |
|
return new ComposedCallCredentials([this, other]); |
|
} |
|
_equals(other) { |
|
if (this === other) { |
|
return true; |
|
} |
|
if (other instanceof SingleCallCredentials) { |
|
return this.metadataGenerator === other.metadataGenerator; |
|
} |
|
else { |
|
return false; |
|
} |
|
} |
|
} |
|
class EmptyCallCredentials extends CallCredentials { |
|
generateMetadata(options) { |
|
return Promise.resolve(new metadata_1.Metadata()); |
|
} |
|
compose(other) { |
|
return other; |
|
} |
|
_equals(other) { |
|
return other instanceof EmptyCallCredentials; |
|
} |
|
} |
|
|