-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcustomRequest.js
164 lines (153 loc) · 4.17 KB
/
customRequest.js
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// httpsRequest.js
// This module is an https request wrapped in a promise design to be used
// to interact with the ICON Blockchain
//
// Imports
const https = require("https");
const http = require("http");
// const { apiNode } = require("../lib.config");
/**
* async https/http request wrapped in a promise
* @param {Object} param - params for the http request
* @param {string} param.hostname
* @param {string} param.ip
* @param {number} param.port
* @param {number} param.timeout
* @param {string} param.path
*/
async function httpx(
params,
data = false,
runSecured = true,
useResponseEvent = false
) {
let method = http;
if (runSecured) {
method = https;
}
const promisifiedQuery = new Promise((resolve, reject) => {
const query = method.request(params, res => {
// Print status code on console
// console.log("Params:");
// console.log(params);
// console.log("data:");
// console.log(data);
// console.log("Status Code: " + res.statusCode);
// console.log(`Http: ${runSecured}`);
// console.log("headers: ", res.headers);
// Process chunked data
let rawData = "";
res.on("data", chunk => {
rawData += chunk;
});
// res.on("data", chunk => {
// console.log("chunk: ", chunk);
// rawData += chunk;
// // if (typeof chunk === "string") {
// // rawData += chunk;
// // } else {
// // rawData = { ...chunk };
// // }
// });
res.on("response", response => {
console.log("response: ", response);
});
// for (let item in res.headers) {
// console.log(item + ": " + res.headers[item]);
// }
// when request completed, pass the data to the 'resolve' callback
res.on("end", () => {
let data;
try {
if (typeof rawData === "string") {
data = JSON.parse(rawData);
} else {
data = rawData;
}
// console.log("raw data");
// console.log(rawData);
// console.log("data");
// console.log(data);
resolve(data);
} catch (err) {
data = { error: err.message, message: rawData };
console.log("error data");
console.log(data);
reject(data);
}
});
// if error, print on console
res.on("error", err => {
console.log("Got error: ", +err.message);
});
});
// If request timeout destroy request
query.on("timeout", () => {
console.log("timeout. destroying query");
query.destroy();
});
// Handle query error
query.on("error", err => {
console.log("error running query, passing error to callback reject");
reject(err);
});
if (data != false) {
// If data param is passed into function we write the data
query.write(data);
}
// end request
query.end();
});
// wait for the response and return it
try {
return await promisifiedQuery;
} catch (err) {
console.log("error while running promisifiedQuery");
console.log(err);
throw new Error("error connecting to node");
}
}
async function customRequest(
path,
data = false,
hostname,
https = true,
port = false,
useResponseEvent = false
) {
let request;
try {
let params = {
hostname: hostname,
path: path,
method: data ? "POST" : "GET",
headers: {
"Content-Type": "application/json"
// charset: "UTF-8"
},
port: port ? port : https ? 443 : 80
};
// if (data != false) {
// params.headers["Content-Length"] = Buffer.byteLength(
// JSON.stringify(data)
// );
// }
// console.log("request");
// console.log(params);
// console.log(typeof data);
// console.log(data);
// console.log(`https: ${https}`);
if (https) {
request = await httpx(params, data, true, useResponseEvent);
} else {
request = await httpx(params, data, false, useResponseEvent);
}
return request;
} catch (err) {
console.log("Error running customRequest");
console.log(err.message);
console.log(request);
return null;
}
}
module.exports = customRequest;