1
>
/*---------------------------------------------------------------------------------------------
requestService.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import type * as http from 'http';
7
>
import type * as https from 'https';
8
>
import { parse as parseUrl } from 'url';
9
>
import { Promises, timeout } from '../../../base/common/async.js';
10
>
import { streamToBufferReadableStream } from '../../../base/common/buffer.js';
11
>
import { CancellationToken } from '../../../base/common/cancellation.js';
12
>
import { CancellationError, getErrorMessage } from '../../../base/common/errors.js';
13
>
import * as streams from '../../../base/common/stream.js';
14
>
import { isBoolean, isNumber } from '../../../base/common/types.js';
15
>
import { IRequestContext, IRequestOptions } from '../../../base/parts/request/common/request.js';
16
>
import { IConfigurationService } from '../../configuration/common/configuration.js';
17
>
import { INativeEnvironmentService } from '../../environment/common/environment.js';
18
>
import { getResolvedShellEnv } from '../../shell/node/shellEnv.js';
19
>
import { ILogService } from '../../log/common/log.js';
20
>
import { AbstractRequestService, AuthInfo, Credentials, IRequestService, systemCertificatesNodeDefault } from '../common/request.js';
21
>
import { Agent, getProxyAgent } from './proxy.js';
22
>
import { createGunzip } from 'zlib';
23
>
24
>
const TRANSIENT_ERROR_CODES = new Set([
25
>
'EAI_AGAIN', // DNS lookup timed out
26
>
'ECONNREFUSED', // Connection refused by server
27
>
'EHOSTDOWN', // Host is down
28
>
'EHOSTUNREACH', // No route to host
29
>
'ENETDOWN', // Network is down
30
>
'ENETUNREACH', // Network is unreachable
31
>
'EPROTO' // Protocol error (TLS/SSL handshake failure)
32
>
]);
33
>
34
>
const IDEMPOTENT_HTTP_METHODS_REGEX = /^(GET|HEAD|OPTIONS)$/i;
35
>
36
function isTransientError(error: unknown): boolean {
37
if (error instanceof Error) {