From 29bced6a0d2d185e0a2403cf3d3046b6cfac5782 Mon Sep 17 00:00:00 2001 From: Christof Marti Date: Mon, 3 Nov 2025 15:26:15 +0100 Subject: [PATCH] Adopt @vscode/proxy-agent 0.36.0 --- package-lock.json | 11 ++++++---- package.json | 2 +- remote/package-lock.json | 11 ++++++---- remote/package.json | 2 +- .../node/nativeModules.integrationTest.ts | 1 + src/vs/platform/request/common/request.ts | 5 ++++- .../platform/request/node/requestService.ts | 13 ++++-------- src/vs/workbench/api/node/proxyResolver.ts | 21 ++++++++----------- 8 files changed, 34 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 34bf47966b7..2ffd2319578 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@vscode/deviceid": "^0.1.1", "@vscode/iconv-lite-umd": "0.7.1", "@vscode/policy-watcher": "^1.3.2", - "@vscode/proxy-agent": "^0.35.0", + "@vscode/proxy-agent": "^0.36.0", "@vscode/ripgrep": "^1.15.13", "@vscode/spdlog": "^0.15.2", "@vscode/sqlite3": "5.1.8-vscode", @@ -3016,9 +3016,9 @@ } }, "node_modules/@vscode/proxy-agent": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/@vscode/proxy-agent/-/proxy-agent-0.35.0.tgz", - "integrity": "sha512-25BxUVwWkRVdVKHIekIz5pshmPprkLmtyPteRIhZIKJF++5u1nLETeHO+a+E957UXnH+YiD2Hh9g9DxVnuBRxA==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/@vscode/proxy-agent/-/proxy-agent-0.36.0.tgz", + "integrity": "sha512-W4mls/+zErqTYcKC41utdmoYnBWZRH1dRF9U4cBAyKU5EhcnWfVsPBvUnXXw1CffI3djmMWnu9JrF/Ynw7lkcg==", "license": "MIT", "dependencies": { "@tootallnate/once": "^3.0.0", @@ -3029,6 +3029,9 @@ "socks-proxy-agent": "^8.0.1", "undici": "^7.2.0" }, + "engines": { + "node": ">=22.15.0" + }, "optionalDependencies": { "@vscode/windows-ca-certs": "^0.3.1" } diff --git a/package.json b/package.json index 31532a685e2..f68e8ffd000 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@vscode/deviceid": "^0.1.1", "@vscode/iconv-lite-umd": "0.7.1", "@vscode/policy-watcher": "^1.3.2", - "@vscode/proxy-agent": "^0.35.0", + "@vscode/proxy-agent": "^0.36.0", "@vscode/ripgrep": "^1.15.13", "@vscode/spdlog": "^0.15.2", "@vscode/sqlite3": "5.1.8-vscode", diff --git a/remote/package-lock.json b/remote/package-lock.json index ff8d5dab11b..4fd02152f92 100644 --- a/remote/package-lock.json +++ b/remote/package-lock.json @@ -13,7 +13,7 @@ "@parcel/watcher": "parcel-bundler/watcher#1ca032aa8339260a8a3bcf825c3a1a71e3e43542", "@vscode/deviceid": "^0.1.1", "@vscode/iconv-lite-umd": "0.7.1", - "@vscode/proxy-agent": "^0.35.0", + "@vscode/proxy-agent": "^0.36.0", "@vscode/ripgrep": "^1.15.13", "@vscode/spdlog": "^0.15.2", "@vscode/tree-sitter-wasm": "^0.2.0", @@ -134,9 +134,9 @@ "license": "MIT" }, "node_modules/@vscode/proxy-agent": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/@vscode/proxy-agent/-/proxy-agent-0.35.0.tgz", - "integrity": "sha512-25BxUVwWkRVdVKHIekIz5pshmPprkLmtyPteRIhZIKJF++5u1nLETeHO+a+E957UXnH+YiD2Hh9g9DxVnuBRxA==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/@vscode/proxy-agent/-/proxy-agent-0.36.0.tgz", + "integrity": "sha512-W4mls/+zErqTYcKC41utdmoYnBWZRH1dRF9U4cBAyKU5EhcnWfVsPBvUnXXw1CffI3djmMWnu9JrF/Ynw7lkcg==", "license": "MIT", "dependencies": { "@tootallnate/once": "^3.0.0", @@ -147,6 +147,9 @@ "socks-proxy-agent": "^8.0.1", "undici": "^7.2.0" }, + "engines": { + "node": ">=22.15.0" + }, "optionalDependencies": { "@vscode/windows-ca-certs": "^0.3.1" } diff --git a/remote/package.json b/remote/package.json index 6be18987d05..d991ee5d8e1 100644 --- a/remote/package.json +++ b/remote/package.json @@ -8,7 +8,7 @@ "@parcel/watcher": "parcel-bundler/watcher#1ca032aa8339260a8a3bcf825c3a1a71e3e43542", "@vscode/deviceid": "^0.1.1", "@vscode/iconv-lite-umd": "0.7.1", - "@vscode/proxy-agent": "^0.35.0", + "@vscode/proxy-agent": "^0.36.0", "@vscode/ripgrep": "^1.15.13", "@vscode/spdlog": "^0.15.2", "@vscode/tree-sitter-wasm": "^0.2.0", diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts index 2a6acbac584..50999154d16 100644 --- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts @@ -115,6 +115,7 @@ flakySuite('Native Modules (all platforms)', () => { const proxyAgent = await import('@vscode/proxy-agent'); // This call will load `@vscode/proxy-agent` which is a native module that we want to test on Windows const windowsCerts = await proxyAgent.loadSystemCertificates({ + loadSystemCertificatesFromNode: () => undefined, log: { trace: () => { }, debug: () => { }, diff --git a/src/vs/platform/request/common/request.ts b/src/vs/platform/request/common/request.ts index 448fecd75da..8338d354265 100644 --- a/src/vs/platform/request/common/request.ts +++ b/src/vs/platform/request/common/request.ts @@ -264,7 +264,10 @@ function registerProxyConfigurations(useHostProxy = true, useHostProxyDefault = tags: ['experimental'], default: false, markdownDescription: localize('systemCertificatesNode', "Controls whether system certificates should be loaded using Node.js built-in support. Reload the window after changing this setting. When during [remote development](https://aka.ms/vscode-remote) the {0} setting is disabled this setting can be configured in the local and the remote settings separately.", '`#http.useLocalProxyConfiguration#`'), - restricted: true + restricted: true, + experiment: { + mode: 'auto' + } }, 'http.experimental.systemCertificatesV2': { type: 'boolean', diff --git a/src/vs/platform/request/node/requestService.ts b/src/vs/platform/request/node/requestService.ts index 81439238f18..47b4743b816 100644 --- a/src/vs/platform/request/node/requestService.ts +++ b/src/vs/platform/request/node/requestService.ts @@ -5,7 +5,6 @@ import type * as http from 'http'; import type * as https from 'https'; -import * as tls from 'tls'; import { parse as parseUrl } from 'url'; import { Promises } from '../../../base/common/async.js'; import { streamToBufferReadableStream } from '../../../base/common/buffer.js'; @@ -119,15 +118,11 @@ export class RequestService extends AbstractRequestService implements IRequestSe } async loadCertificates(): Promise { - const useNodeSystemCerts = this.getConfigValue('http.systemCertificatesNode', false); - if (useNodeSystemCerts) { - const start = Date.now(); - const systemCerts = tls.getCACertificates('system'); - this.logService.trace(`RequestService#loadCertificates: Loaded Node.js system certificates (${Date.now() - start}ms):`, systemCerts.length); - return systemCerts; - } const proxyAgent = await import('@vscode/proxy-agent'); - return proxyAgent.loadSystemCertificates({ log: this.logService }); + return proxyAgent.loadSystemCertificates({ + loadSystemCertificatesFromNode: () => this.getConfigValue('http.systemCertificatesNode', false), + log: this.logService, + }); } private getConfigValue(key: string, fallback?: T): T | undefined { diff --git a/src/vs/workbench/api/node/proxyResolver.ts b/src/vs/workbench/api/node/proxyResolver.ts index 4d117c9599a..5415469ee99 100644 --- a/src/vs/workbench/api/node/proxyResolver.ts +++ b/src/vs/workbench/api/node/proxyResolver.ts @@ -54,6 +54,7 @@ export function connectProxyResolver( isAdditionalFetchSupportEnabled: () => getExtHostConfigValue(configProvider, isRemote, 'http.fetchAdditionalSupport', true), addCertificatesV1: () => certSettingV1(configProvider, isRemote), addCertificatesV2: () => certSettingV2(configProvider, isRemote), + loadSystemCertificatesFromNode: () => getExtHostConfigValue(configProvider, isRemote, 'http.systemCertificatesNode', false), log: extHostLogService, getLogLevel: () => { const level = extHostLogService.getLevel(); @@ -81,21 +82,17 @@ export function connectProxyResolver( const useNodeSystemCerts = getExtHostConfigValue(configProvider, isRemote, 'http.systemCertificatesNode', false); const promises: Promise[] = []; if (isRemote) { - if (useNodeSystemCerts) { - const start = Date.now(); - const systemCerts = tls.getCACertificates('system'); - extHostLogService.trace(`ProxyResolver#loadAdditionalCertificates: Loaded Node.js system certificates (${Date.now() - start}ms):`, systemCerts.length); - promises.push(Promise.resolve(systemCerts)); - } else { - promises.push(loadSystemCertificates({ log: extHostLogService })); - } + promises.push(loadSystemCertificates({ + loadSystemCertificatesFromNode: () => useNodeSystemCerts, + log: extHostLogService, + })); } if (loadLocalCertificates) { if (!isRemote && useNodeSystemCerts) { - const start = Date.now(); - const systemCerts = tls.getCACertificates('system'); - extHostLogService.trace(`ProxyResolver#loadAdditionalCertificates: Loaded Node.js system certificates (${Date.now() - start}ms):`, systemCerts.length); - promises.push(Promise.resolve(systemCerts)); + promises.push(loadSystemCertificates({ + loadSystemCertificatesFromNode: () => useNodeSystemCerts, + log: extHostLogService, + })); } else { extHostLogService.trace('ProxyResolver#loadAdditionalCertificates: Loading certificates from main process'); const certs = extHostWorkspace.loadCertificates(); // Loading from main process to share cache.