diff --git a/extensions/azurecore/src/account-provider/auths/httpClient.ts b/extensions/azurecore/src/account-provider/auths/httpClient.ts index 71ba2bfcb0..c8c20922f8 100644 --- a/extensions/azurecore/src/account-provider/auths/httpClient.ts +++ b/extensions/azurecore/src/account-provider/auths/httpClient.ts @@ -16,7 +16,8 @@ export enum HttpMethod { GET = 'get', POST = 'post', PUT = 'put', - DELETE = 'delete' + DELETE = 'delete', + PATCH = 'patch' } export enum HttpStatus { @@ -118,6 +119,23 @@ export class HttpClient { } } + /** + * Http Patch request + * @param url + * @param options + */ + async sendPatchRequestAsync( + url: string, + options?: NetworkRequestOptions, + cancellationToken?: number + ): Promise> { + if (this.proxyUrl) { + return networkRequestViaProxy(url, this.proxyUrl, HttpMethod.PATCH, options, this.customAgentOptions as http.AgentOptions, cancellationToken); + } else { + return networkRequestViaHttps(url, HttpMethod.PATCH, options, this.customAgentOptions as https.AgentOptions, cancellationToken); + } + } + } const networkRequestViaProxy = ( @@ -270,6 +288,7 @@ const networkRequestViaHttps = ( ): Promise> => { const isPostRequest = httpMethod === HttpMethod.POST; const isPutRequest = httpMethod === HttpMethod.PUT; + const isPatchRequest = httpMethod === HttpMethod.PATCH; // Note: Text Encoder is necessary here because otherwise it was not able to handle Chinese characters in table names. const body = (new TextEncoder()).encode(options?.body || ''); const url = new URL(urlString); @@ -288,7 +307,7 @@ const networkRequestViaHttps = ( customOptions.agent = new https.Agent(agentOptions); } - if (isPostRequest || isPutRequest) { + if (isPostRequest || isPutRequest || isPatchRequest) { // needed for post request to work customOptions.headers = { ...customOptions.headers, @@ -306,7 +325,7 @@ const networkRequestViaHttps = ( }); } - if (isPostRequest || isPutRequest) { + if (isPostRequest || isPutRequest || isPatchRequest) { request.write(body); } diff --git a/extensions/azurecore/src/azureResource/utils.ts b/extensions/azurecore/src/azureResource/utils.ts index 5b524f849a..27ad2a221c 100644 --- a/extensions/azurecore/src/azureResource/utils.ts +++ b/extensions/azurecore/src/azureResource/utils.ts @@ -446,8 +446,8 @@ export async function getSelectedSubscriptions(appContext: AppContext, account?: * @param account The azure account used to acquire access token * @param subscription The subscription under azure account where the service will perform operations. * @param path The path for the service starting from '/subscription/..'. See https://docs.microsoft.com/rest/api/azure/. - * @param requestType Http request method. Currently GET, PUT, POST and DELETE methods are supported. - * @param requestBody Optional request body to be used in PUT and POST requests. + * @param requestType Http request method. Currently GET, PUT, POST, DELETE, and PATCH methods are supported. + * @param requestBody Optional request body to be used in PUT, POST, AND PATCH requests. * @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array. * @param host Use this to override the host. The default host is https://management.azure.com * @param requestHeaders Provide additional request headers @@ -545,6 +545,9 @@ export async function makeHttpRequest( headers: reqHeaders }); break; + case HttpRequestMethod.PATCH: + response = await httpClient.sendPatchRequestAsync(requestUrl, networkRequestOptions); + break; default: const error = new Error(`Unknown RequestType "${requestType}"`); if (!ignoreErrors) { diff --git a/extensions/azurecore/src/azurecore.d.ts b/extensions/azurecore/src/azurecore.d.ts index c41af3bc11..fdf2e00f5d 100644 --- a/extensions/azurecore/src/azurecore.d.ts +++ b/extensions/azurecore/src/azurecore.d.ts @@ -274,7 +274,8 @@ declare module 'azurecore' { GET, PUT, POST, - DELETE + DELETE, + PATCH } /** @@ -314,8 +315,8 @@ declare module 'azurecore' { * @param account The azure account used to acquire access token * @param subscription The subscription under azure account where the service will perform operations. * @param path The path for the service starting from '/subscription/..'. See https://docs.microsoft.com/rest/api/azure/. - * @param requestType Http request method. Currently GET, PUT, POST and DELETE methods are supported. - * @param requestBody Optional request body to be used in PUT and POST requests. + * @param requestType Http request method. Currently GET, PUT, POST, DELETE, and PATCH methods are supported. + * @param requestBody Optional request body to be used in PUT, POST, and PATCH requests. * @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array. * @param host Use this to override the host. The default host is https://management.azure.com * @param requestHeaders Provide additional request headers