Path: blob/main/extensions/copilot/src/platform/networking/vscode-node/electronFetcher.ts
13401 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { IEnvService } from '../../env/common/envService';6import { ElectronFetchErrorChromiumDetails } from '../../log/common/logService';7import { ReportFetchEvent } from '../common/fetcherService';8import { BaseFetchFetcher } from '../node/baseFetchFetcher';910export interface ElectronFetchError {11readonly chromiumDetails?: ElectronFetchErrorChromiumDetails;12}1314export class ElectronFetcher extends BaseFetchFetcher {1516static readonly ID = 'electron-fetch' as const;1718public static create(envService: IEnvService, reportEvent: ReportFetchEvent = () => { }, userAgentLibraryUpdate?: (original: string) => string): ElectronFetcher | null {19const net = loadNetModule();20if (!net) {21return null;22}23return new ElectronFetcher(net.fetch, envService, reportEvent, userAgentLibraryUpdate);24}2526private constructor(27fetchImpl: typeof import('electron').net.fetch,28envService: IEnvService,29reportEvent: ReportFetchEvent,30userAgentLibraryUpdate?: (original: string) => string,31) {32super(fetchImpl, envService, ElectronFetcher.ID, reportEvent, userAgentLibraryUpdate);33}3435getUserAgentLibrary(): string {36return ElectronFetcher.ID;37}3839isInternetDisconnectedError(e: any): boolean {40return ['net::ERR_INTERNET_DISCONNECTED', 'net::ERR_NETWORK_IO_SUSPENDED'].includes(e?.message);41}42isFetcherError(e: any): boolean {43return e && e.message && e.message.startsWith('net::');44}45override isNetworkProcessCrashedError(e: unknown): boolean {46return (e as ElectronFetchError)?.chromiumDetails?.network_process_crashed === true;47}48}4950function loadNetModule(): typeof import('electron').net | undefined {51try {52return require('electron').net;53} catch (err) { }5455return undefined;56}575859