-
Notifications
You must be signed in to change notification settings - Fork 24
/
request-io.ts
106 lines (95 loc) · 2.59 KB
/
request-io.ts
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import * as request from "request";
import * as io from "./interfaces/http-io";
/**
* Converts implementation-independant IO options to the concrete
* options used by the `request` library.
*
* @param ioOptions Implementation independent IO options
* @returns {request.Options} Corresponding `request` options
*/
function asRequestOptions(ioOptions: io.GetOptions | io.PostOptions | io.PutOptions): request.Options {
const result: request.Options = {...<any> ioOptions};
if (ioOptions.queryString !== undefined) {
delete (result as any).queryString;
result.qs = ioOptions.queryString;
}
if (ioOptions.cookies !== undefined) {
delete (result as any).cookies;
result.jar = request.jar(ioOptions.cookies);
}
return result;
}
/**
* Send a GET request
*
* @param options
*/
export async function get(options: io.GetOptions): Promise<io.Response> {
return new Promise<io.Response>((resolve, reject) => {
request.get(asRequestOptions(options), (error, response, body) => {
if (error) {
return reject(error);
}
if (response.statusCode === undefined) {
return reject(new Error("Missing status code"));
}
const ioResponse: io.Response = {
statusCode: response.statusCode,
body,
headers: response.headers,
};
resolve(ioResponse);
});
});
}
/**
* Send a POST request
*
* @param options
*/
export async function post(options: io.PostOptions): Promise<io.Response> {
return new Promise<io.Response>((resolve, reject) => {
request.post(asRequestOptions(options), (error, response, body) => {
if (error) {
return reject(error);
}
if (response.statusCode === undefined) {
return reject(new Error("Missing status code"));
}
const ioResponse: io.Response = {
statusCode: response.statusCode,
body,
headers: response.headers,
};
resolve(ioResponse);
});
});
}
/**
* Send a PUT request
*
* @param options
*/
export async function put(options: io.PutOptions): Promise<io.Response> {
return new Promise<io.Response>((resolve, reject) => {
request.put(asRequestOptions(options), (error, response, body) => {
if (error) {
return reject(error);
}
if (response.statusCode === undefined) {
return reject(new Error("Missing status code"));
}
const ioResponse: io.Response = {
statusCode: response.statusCode,
body,
headers: response.headers,
};
resolve(ioResponse);
});
});
}
export const requestIo: io.HttpIo = {
get,
post,
put,
};