66import * as http from 'http' ;
77import * as https from 'https' ;
88import * as tls from 'tls' ;
9+ import * as net from 'net' ;
910
1011import { IExtHostWorkspaceProvider } from 'vs/workbench/api/common/extHostWorkspace' ;
1112import { ExtHostConfigProvider } from 'vs/workbench/api/common/extHostConfiguration' ;
@@ -15,7 +16,7 @@ import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionS
1516import { URI } from 'vs/base/common/uri' ;
1617import { ILogService } from 'vs/platform/log/common/log' ;
1718import { IExtensionDescription } from 'vs/platform/extensions/common/extensions' ;
18- import { LogLevel , createHttpPatch , createProxyResolver , createTlsPatch , ProxySupportSetting } from '@vscode/proxy-agent' ;
19+ import { LogLevel , createHttpPatch , createProxyResolver , createTlsPatch , ProxySupportSetting , ProxyAgentParams , createNetPatch } from '@vscode/proxy-agent' ;
1920
2021export function connectProxyResolver (
2122 extHostWorkspace : IExtHostWorkspaceProvider ,
@@ -27,7 +28,7 @@ export function connectProxyResolver(
2728) {
2829 const useHostProxy = initData . environment . useHostProxy ;
2930 const doUseHostProxy = typeof useHostProxy === 'boolean' ? useHostProxy : ! initData . remote . isRemote ;
30- const resolveProxy = createProxyResolver ( {
31+ const params : ProxyAgentParams = {
3132 resolveProxy : url => extHostWorkspace . resolveProxy ( url ) ,
3233 getHttpProxySetting : ( ) => configProvider . getConfiguration ( 'http' ) . get ( 'proxy' ) ,
3334 log : ( level , message , ...args ) => {
@@ -50,13 +51,19 @@ export function connectProxyResolver(
5051 // TODO @chrmarti Remove this from proxy agent
5152 proxyResolveTelemetry : ( ) => { } ,
5253 useHostProxy : doUseHostProxy ,
54+ useSystemCertificatesV2 : certSettingV2 ( configProvider ) ,
55+ addCertificates : [ ] ,
5356 env : process . env ,
57+ } ;
58+ configProvider . onDidChangeConfiguration ( e => {
59+ params . useSystemCertificatesV2 = certSettingV2 ( configProvider ) ;
5460 } ) ;
55- const lookup = createPatchedModules ( configProvider , resolveProxy ) ;
61+ const resolveProxy = createProxyResolver ( params ) ;
62+ const lookup = createPatchedModules ( params , configProvider , resolveProxy ) ;
5663 return configureModuleLoading ( extensionService , lookup ) ;
5764}
5865
59- function createPatchedModules ( configProvider : ExtHostConfigProvider , resolveProxy : ReturnType < typeof createProxyResolver > ) {
66+ function createPatchedModules ( params : ProxyAgentParams , configProvider : ExtHostConfigProvider , resolveProxy : ReturnType < typeof createProxyResolver > ) {
6067 const proxySetting = {
6168 config : configProvider . getConfiguration ( 'http' )
6269 . get < ProxySupportSetting > ( 'proxySupport' ) || 'off'
@@ -66,12 +73,10 @@ function createPatchedModules(configProvider: ExtHostConfigProvider, resolveProx
6673 . get < ProxySupportSetting > ( 'proxySupport' ) || 'off' ;
6774 } ) ;
6875 const certSetting = {
69- config : ! ! configProvider . getConfiguration ( 'http' )
70- . get < boolean > ( 'systemCertificates' )
76+ config : certSettingV1 ( configProvider )
7177 } ;
7278 configProvider . onDidChangeConfiguration ( e => {
73- certSetting . config = ! ! configProvider . getConfiguration ( 'http' )
74- . get < boolean > ( 'systemCertificates' ) ;
79+ certSetting . config = certSettingV1 ( configProvider ) ;
7580 } ) ;
7681
7782 return {
@@ -89,17 +94,32 @@ function createPatchedModules(configProvider: ExtHostConfigProvider, resolveProx
8994 onRequest : Object . assign ( { } , https , createHttpPatch ( https , resolveProxy , proxySetting , certSetting , true ) ) ,
9095 default : Object . assign ( https , createHttpPatch ( https , resolveProxy , proxySetting , certSetting , false ) ) // run last
9196 } as Record < string , typeof https > ,
92- tls : Object . assign ( tls , createTlsPatch ( tls ) )
97+ net : Object . assign ( net , createNetPatch ( params , net ) ) ,
98+ tls : Object . assign ( tls , createTlsPatch ( params , tls ) )
9399 } ;
94100}
95101
102+ function certSettingV1 ( configProvider : ExtHostConfigProvider ) {
103+ const http = configProvider . getConfiguration ( 'http' ) ;
104+ return ! http . get < boolean > ( 'experimental.systemCertificatesV2' ) && ! ! http . get < boolean > ( 'systemCertificates' ) ;
105+ }
106+
107+ function certSettingV2 ( configProvider : ExtHostConfigProvider ) {
108+ const http = configProvider . getConfiguration ( 'http' ) ;
109+ return ! ! http . get < boolean > ( 'experimental.systemCertificatesV2' ) && ! ! http . get < boolean > ( 'systemCertificates' ) ;
110+ }
111+
96112const modulesCache = new Map < IExtensionDescription | undefined , { http ?: typeof http ; https ?: typeof https } > ( ) ;
97113function configureModuleLoading ( extensionService : ExtHostExtensionService , lookup : ReturnType < typeof createPatchedModules > ) : Promise < void > {
98114 return extensionService . getExtensionPathIndex ( )
99115 . then ( extensionPaths => {
100116 const node_module = < any > globalThis . _VSCODE_NODE_MODULES . module ;
101117 const original = node_module . _load ;
102118 node_module . _load = function load ( request : string , parent : { filename : string } , isMain : boolean ) {
119+ if ( request === 'net' ) {
120+ return lookup . net ;
121+ }
122+
103123 if ( request === 'tls' ) {
104124 return lookup . tls ;
105125 }
0 commit comments