forked from DonJayamanne/pythonVSCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttpClient.ts
More file actions
36 lines (32 loc) · 1.38 KB
/
httpClient.ts
File metadata and controls
36 lines (32 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
import { inject, injectable } from 'inversify';
import * as request from 'request';
import { IHttpClient } from '../../activation/types';
import { IServiceContainer } from '../../ioc/types';
import { IWorkspaceService } from '../application/types';
@injectable()
export class HttpClient implements IHttpClient {
public readonly requestOptions: request.CoreOptions;
constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) {
const workspaceService = serviceContainer.get<IWorkspaceService>(IWorkspaceService);
this.requestOptions = { proxy: workspaceService.getConfiguration('http').get('proxy', '') };
}
public downloadFile(uri: string): request.Request {
return request(uri, this.requestOptions);
}
public getJSON<T>(uri: string): Promise<T> {
return new Promise<T>((resolve, reject) => {
request(uri, this.requestOptions, (ex, response, body) => {
if (ex) {
return reject(ex);
}
if (response.statusCode !== 200) {
return reject(new Error(`Failed with status ${response.statusCode}, ${response.statusMessage}, Uri ${uri}`));
}
resolve(JSON.parse(body) as T);
});
});
}
}