You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					116 lines
				
				4.2 KiB
			
		
		
			
		
	
	
					116 lines
				
				4.2 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								// Copyright 2019 Google LLC
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								// you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								// You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//      http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								// distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								// See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								// limitations under the License.
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.DefaultTransporter = void 0;
							 | 
						||
| 
								 | 
							
								const gaxios_1 = require("gaxios");
							 | 
						||
| 
								 | 
							
								const options_1 = require("./options");
							 | 
						||
| 
								 | 
							
								// eslint-disable-next-line @typescript-eslint/no-var-requires
							 | 
						||
| 
								 | 
							
								const pkg = require('../../package.json');
							 | 
						||
| 
								 | 
							
								const PRODUCT_NAME = 'google-api-nodejs-client';
							 | 
						||
| 
								 | 
							
								class DefaultTransporter {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Configures request options before making a request.
							 | 
						||
| 
								 | 
							
								     * @param opts GaxiosOptions options.
							 | 
						||
| 
								 | 
							
								     * @return Configured options.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    configure(opts = {}) {
							 | 
						||
| 
								 | 
							
								        opts.headers = opts.headers || {};
							 | 
						||
| 
								 | 
							
								        if (typeof window === 'undefined') {
							 | 
						||
| 
								 | 
							
								            // set transporter user agent if not in browser
							 | 
						||
| 
								 | 
							
								            const uaValue = opts.headers['User-Agent'];
							 | 
						||
| 
								 | 
							
								            if (!uaValue) {
							 | 
						||
| 
								 | 
							
								                opts.headers['User-Agent'] = DefaultTransporter.USER_AGENT;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (!uaValue.includes(`${PRODUCT_NAME}/`)) {
							 | 
						||
| 
								 | 
							
								                opts.headers['User-Agent'] = `${uaValue} ${DefaultTransporter.USER_AGENT}`;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            // track google-auth-library-nodejs version:
							 | 
						||
| 
								 | 
							
								            const authVersion = `auth/${pkg.version}`;
							 | 
						||
| 
								 | 
							
								            if (opts.headers['x-goog-api-client'] &&
							 | 
						||
| 
								 | 
							
								                !opts.headers['x-goog-api-client'].includes(authVersion)) {
							 | 
						||
| 
								 | 
							
								                opts.headers['x-goog-api-client'] = `${opts.headers['x-goog-api-client']} ${authVersion}`;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (!opts.headers['x-goog-api-client']) {
							 | 
						||
| 
								 | 
							
								                const nodeVersion = process.version.replace(/^v/, '');
							 | 
						||
| 
								 | 
							
								                opts.headers['x-goog-api-client'] = `gl-node/${nodeVersion} ${authVersion}`;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return opts;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    request(opts, callback) {
							 | 
						||
| 
								 | 
							
								        // ensure the user isn't passing in request-style options
							 | 
						||
| 
								 | 
							
								        opts = this.configure(opts);
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            (0, options_1.validate)(opts);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        catch (e) {
							 | 
						||
| 
								 | 
							
								            if (callback) {
							 | 
						||
| 
								 | 
							
								                return callback(e);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                throw e;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (callback) {
							 | 
						||
| 
								 | 
							
								            (0, gaxios_1.request)(opts).then(r => {
							 | 
						||
| 
								 | 
							
								                callback(null, r);
							 | 
						||
| 
								 | 
							
								            }, e => {
							 | 
						||
| 
								 | 
							
								                callback(this.processError(e));
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            return (0, gaxios_1.request)(opts).catch(e => {
							 | 
						||
| 
								 | 
							
								                throw this.processError(e);
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Changes the error to include details from the body.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    processError(e) {
							 | 
						||
| 
								 | 
							
								        const res = e.response;
							 | 
						||
| 
								 | 
							
								        const err = e;
							 | 
						||
| 
								 | 
							
								        const body = res ? res.data : null;
							 | 
						||
| 
								 | 
							
								        if (res && body && body.error && res.status !== 200) {
							 | 
						||
| 
								 | 
							
								            if (typeof body.error === 'string') {
							 | 
						||
| 
								 | 
							
								                err.message = body.error;
							 | 
						||
| 
								 | 
							
								                err.code = res.status.toString();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (Array.isArray(body.error.errors)) {
							 | 
						||
| 
								 | 
							
								                err.message = body.error.errors
							 | 
						||
| 
								 | 
							
								                    .map((err2) => err2.message)
							 | 
						||
| 
								 | 
							
								                    .join('\n');
							 | 
						||
| 
								 | 
							
								                err.code = body.error.code;
							 | 
						||
| 
								 | 
							
								                err.errors = body.error.errors;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                err.message = body.error.message;
							 | 
						||
| 
								 | 
							
								                err.code = body.error.code || res.status;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else if (res && res.status >= 400) {
							 | 
						||
| 
								 | 
							
								            // Consider all 4xx and 5xx responses errors.
							 | 
						||
| 
								 | 
							
								            err.message = body;
							 | 
						||
| 
								 | 
							
								            err.code = res.status.toString();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return err;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.DefaultTransporter = DefaultTransporter;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Default user agent.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								DefaultTransporter.USER_AGENT = `${PRODUCT_NAME}/${pkg.version}`;
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=transporters.js.map
							 |