UNPKG

azure-devops-node-api

Version:
72 lines (71 loc) 3.75 kB
"use strict"; // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AdoRestClient = exports.AdoHttpClient = void 0; const RateLimitUtils_1 = require("./RateLimitUtils"); const rm = require("typed-rest-client/RestClient"); const hm = require("typed-rest-client/HttpClient"); /** * AdoHttpClient that extracts rate limit headers and attaches them to the response object */ class AdoHttpClient extends hm.HttpClient { request(verb, requestUrl, data, headers) { const _super = Object.create(null, { request: { get: () => super.request } }); var _a; return __awaiter(this, void 0, void 0, function* () { const res = yield _super.request.call(this, verb, requestUrl, data, headers); const resHeaders = (_a = res === null || res === void 0 ? void 0 : res.message) === null || _a === void 0 ? void 0 : _a.headers; RateLimitUtils_1.extractRateLimitHeaders(resHeaders, res); return res; }); } } exports.AdoHttpClient = AdoHttpClient; /** * AdoRestClient that extracts rate limit headers and attaches them to the response/result objects */ class AdoRestClient extends rm.RestClient { processResponse(res, options) { const _super = Object.create(null, { processResponse: { get: () => super.processResponse } }); var _a; return __awaiter(this, void 0, void 0, function* () { const headers = (_a = res === null || res === void 0 ? void 0 : res.message) === null || _a === void 0 ? void 0 : _a.headers; try { const response = yield _super.processResponse.call(this, res, options); if (response && response.result && typeof response.result === 'object') { RateLimitUtils_1.extractRateLimitHeaders(headers, response.result); // For collection responses (e.g., { count, value: [...] }), also attach to the array if (Array.isArray(response.result.value)) { RateLimitUtils_1.extractRateLimitHeaders(headers, response.result.value); } } return response; } catch (err) { // Use the original response headers captured before super.processResponse, // because the base implementation may not populate err.responseHeaders // when the response body is not valid JSON (e.g., HTML error pages on 429). RateLimitUtils_1.extractRateLimitHeaders(headers, err); if ((err === null || err === void 0 ? void 0 : err.result) && typeof err.result === 'object') { RateLimitUtils_1.extractRateLimitHeaders(headers, err.result); } return Promise.reject(err); } }); } } exports.AdoRestClient = AdoRestClient;