| "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; |
| } |
| } |
| |