1 |
|
2 |
|
3 |
|
4 | import { AbortError } from "./Errors";
|
5 | import { HttpClient, HttpRequest, HttpResponse } from "./HttpClient";
|
6 | import { ILogger } from "./ILogger";
|
7 | import { NodeHttpClient } from "./NodeHttpClient";
|
8 | import { XhrHttpClient } from "./XhrHttpClient";
|
9 |
|
10 |
|
11 | export class DefaultHttpClient extends HttpClient {
|
12 | private readonly httpClient: HttpClient;
|
13 |
|
14 |
|
15 | public constructor(logger: ILogger) {
|
16 | super();
|
17 |
|
18 | if (typeof XMLHttpRequest !== "undefined") {
|
19 | this.httpClient = new XhrHttpClient(logger);
|
20 | } else {
|
21 | this.httpClient = new NodeHttpClient(logger);
|
22 | }
|
23 | }
|
24 |
|
25 |
|
26 | public send(request: HttpRequest): Promise<HttpResponse> {
|
27 |
|
28 | if (request.abortSignal && request.abortSignal.aborted) {
|
29 | return Promise.reject(new AbortError());
|
30 | }
|
31 |
|
32 | if (!request.method) {
|
33 | return Promise.reject(new Error("No method defined."));
|
34 | }
|
35 | if (!request.url) {
|
36 | return Promise.reject(new Error("No url defined."));
|
37 | }
|
38 |
|
39 | return this.httpClient.send(request);
|
40 | }
|
41 |
|
42 | public getCookieString(url: string): string {
|
43 | return this.httpClient.getCookieString(url);
|
44 | }
|
45 | }
|