@faasjs/request 0.0.4-beta.14 → 0.0.4-beta.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +94 -46
- package/dist/index.mjs +96 -48
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ var url = require('url');
|
|
|
6
6
|
var fs = require('fs');
|
|
7
7
|
var path = require('path');
|
|
8
8
|
var logger = require('@faasjs/logger');
|
|
9
|
+
var zlib = require('zlib');
|
|
9
10
|
|
|
10
11
|
function _interopNamespace(e) {
|
|
11
12
|
if (e && e.__esModule) return e;
|
|
@@ -119,6 +120,9 @@ async function request(url$1, {
|
|
|
119
120
|
passphrase,
|
|
120
121
|
agent
|
|
121
122
|
};
|
|
123
|
+
if (!options.headers["Accept-Encoding"] && !downloadFile && !downloadStream) {
|
|
124
|
+
options.headers["Accept-Encoding"] = "br,gzip";
|
|
125
|
+
}
|
|
122
126
|
for (const key in headers)
|
|
123
127
|
if (typeof headers[key] !== "undefined" && headers[key] !== null)
|
|
124
128
|
options.headers[key] = headers[key];
|
|
@@ -129,61 +133,100 @@ async function request(url$1, {
|
|
|
129
133
|
body = JSON.stringify(body);
|
|
130
134
|
if (body && !options.headers["Content-Length"])
|
|
131
135
|
options.headers["Content-Length"] = Buffer.byteLength(body);
|
|
132
|
-
return await new Promise(
|
|
136
|
+
return await new Promise((resolve, reject) => {
|
|
133
137
|
logger$1.debug("request %j", {
|
|
134
138
|
...options,
|
|
135
139
|
body
|
|
136
140
|
});
|
|
137
|
-
const req = protocol.request(options,
|
|
141
|
+
const req = protocol.request(options, (res) => {
|
|
138
142
|
if (downloadStream) {
|
|
139
|
-
res.pipe(downloadStream);
|
|
140
|
-
downloadStream.on("finish", () =>
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
stream.on("finish", () => resolve(void 0));
|
|
145
|
-
} else {
|
|
146
|
-
const raw = [];
|
|
147
|
-
res.on("data", (chunk) => {
|
|
148
|
-
raw.push(chunk);
|
|
143
|
+
res.pipe(downloadStream, { end: true });
|
|
144
|
+
downloadStream.on("finish", () => {
|
|
145
|
+
res.destroy();
|
|
146
|
+
downloadStream.end();
|
|
147
|
+
resolve(void 0);
|
|
149
148
|
});
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (downloadFile) {
|
|
152
|
+
logger$1.debug("downloadFile");
|
|
153
|
+
const stream2 = fs.createWriteStream(downloadFile, { autoClose: true });
|
|
154
|
+
res.pipe(stream2, { end: true });
|
|
150
155
|
res.on("end", () => {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
logger$1.debug("end");
|
|
157
|
+
res.destroy();
|
|
158
|
+
});
|
|
159
|
+
stream2.on("finish", () => {
|
|
160
|
+
stream2.end();
|
|
161
|
+
stream2.close();
|
|
162
|
+
logger$1.debug("finish");
|
|
163
|
+
});
|
|
164
|
+
stream2.on("close", () => {
|
|
165
|
+
logger$1.debug(
|
|
166
|
+
"finish",
|
|
167
|
+
res.closed,
|
|
168
|
+
res.destroyed,
|
|
169
|
+
stream2.destroyed,
|
|
170
|
+
stream2.closed,
|
|
171
|
+
req.closed,
|
|
172
|
+
req.destroyed
|
|
158
173
|
);
|
|
159
|
-
|
|
160
|
-
response.request = options;
|
|
161
|
-
response.request.body = body;
|
|
162
|
-
response.statusCode = res.statusCode;
|
|
163
|
-
response.statusMessage = res.statusMessage;
|
|
164
|
-
response.headers = res.headers;
|
|
165
|
-
response.body = data;
|
|
166
|
-
if (response.body && response.headers["content-type"] && response.headers["content-type"].includes("application/json"))
|
|
167
|
-
try {
|
|
168
|
-
response.body = (parse || JSON.parse)(response.body);
|
|
169
|
-
logger$1.debug("response.parse JSON");
|
|
170
|
-
} catch (error) {
|
|
171
|
-
console.warn("response plain body", response.body);
|
|
172
|
-
console.error(error);
|
|
173
|
-
}
|
|
174
|
-
if (response.statusCode >= 200 && response.statusCode < 400)
|
|
175
|
-
resolve(response);
|
|
176
|
-
else {
|
|
177
|
-
logger$1.debug("response.error %j", response);
|
|
178
|
-
reject(
|
|
179
|
-
new ResponseError(
|
|
180
|
-
`${res.statusMessage || res.statusCode} ${options.host}${options.path}`,
|
|
181
|
-
response
|
|
182
|
-
)
|
|
183
|
-
);
|
|
184
|
-
}
|
|
174
|
+
resolve(void 0);
|
|
185
175
|
});
|
|
176
|
+
return;
|
|
186
177
|
}
|
|
178
|
+
let stream = res;
|
|
179
|
+
switch (res.headers["content-encoding"]) {
|
|
180
|
+
case "br":
|
|
181
|
+
stream = res.pipe(zlib.createBrotliDecompress());
|
|
182
|
+
break;
|
|
183
|
+
case "gzip":
|
|
184
|
+
stream = res.pipe(zlib.createGunzip());
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
const raw = [];
|
|
188
|
+
stream.on("data", (chunk) => raw.push(chunk));
|
|
189
|
+
stream.on("end", () => {
|
|
190
|
+
const data = Buffer.concat(raw).toString();
|
|
191
|
+
logger$1.timeEnd(
|
|
192
|
+
url$1,
|
|
193
|
+
"response %s %s %s %j",
|
|
194
|
+
res.statusCode,
|
|
195
|
+
res.headers["content-type"],
|
|
196
|
+
res.headers["content-encoding"],
|
|
197
|
+
data
|
|
198
|
+
);
|
|
199
|
+
const response = /* @__PURE__ */ Object.create(null);
|
|
200
|
+
response.request = options;
|
|
201
|
+
response.request.body = body;
|
|
202
|
+
response.statusCode = res.statusCode;
|
|
203
|
+
response.statusMessage = res.statusMessage;
|
|
204
|
+
response.headers = res.headers;
|
|
205
|
+
response.body = data;
|
|
206
|
+
if (response.body && response.headers["content-type"] && response.headers["content-type"].includes("application/json"))
|
|
207
|
+
try {
|
|
208
|
+
response.body = (parse || JSON.parse)(response.body);
|
|
209
|
+
logger$1.debug("response.parse JSON");
|
|
210
|
+
} catch (error) {
|
|
211
|
+
console.warn("response plain body", response.body);
|
|
212
|
+
console.error(error);
|
|
213
|
+
}
|
|
214
|
+
if (response.statusCode >= 200 && response.statusCode < 400)
|
|
215
|
+
resolve(response);
|
|
216
|
+
else {
|
|
217
|
+
logger$1.debug("response.error %j", response);
|
|
218
|
+
reject(
|
|
219
|
+
new ResponseError(
|
|
220
|
+
`${res.statusMessage || res.statusCode} ${options.host}${options.path}`,
|
|
221
|
+
response
|
|
222
|
+
)
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
stream.on("error", (e) => {
|
|
227
|
+
logger$1.timeEnd(url$1, "response.error %j", e);
|
|
228
|
+
reject(e);
|
|
229
|
+
});
|
|
187
230
|
});
|
|
188
231
|
if (body)
|
|
189
232
|
req.write(body);
|
|
@@ -205,10 +248,15 @@ async function request(url$1, {
|
|
|
205
248
|
req.setHeader("Content-Length", multipartBody.length);
|
|
206
249
|
req.write(multipartBody);
|
|
207
250
|
}
|
|
208
|
-
req.on("error",
|
|
251
|
+
req.on("error", (e) => {
|
|
209
252
|
logger$1.timeEnd(url$1, "response.error %j", e);
|
|
210
253
|
reject(e);
|
|
211
254
|
});
|
|
255
|
+
req.on("timeout", () => {
|
|
256
|
+
logger$1.timeEnd(url$1, "response.timeout");
|
|
257
|
+
req.destroy();
|
|
258
|
+
reject(Error("timeout"));
|
|
259
|
+
});
|
|
212
260
|
logger$1.time(url$1);
|
|
213
261
|
req.end();
|
|
214
262
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import * as http from 'http';
|
|
2
|
-
import * as https from 'https';
|
|
1
|
+
import * as http from 'node:http';
|
|
2
|
+
import * as https from 'node:https';
|
|
3
3
|
import { URL } from 'url';
|
|
4
4
|
import { createWriteStream, readFileSync } from 'fs';
|
|
5
5
|
import { basename } from 'path';
|
|
6
6
|
import { Logger } from '@faasjs/logger';
|
|
7
|
+
import { createGunzip, createBrotliDecompress } from 'zlib';
|
|
7
8
|
|
|
8
9
|
// src/index.ts
|
|
9
10
|
var mock = null;
|
|
@@ -96,6 +97,9 @@ async function request(url, {
|
|
|
96
97
|
passphrase,
|
|
97
98
|
agent
|
|
98
99
|
};
|
|
100
|
+
if (!options.headers["Accept-Encoding"] && !downloadFile && !downloadStream) {
|
|
101
|
+
options.headers["Accept-Encoding"] = "br,gzip";
|
|
102
|
+
}
|
|
99
103
|
for (const key in headers)
|
|
100
104
|
if (typeof headers[key] !== "undefined" && headers[key] !== null)
|
|
101
105
|
options.headers[key] = headers[key];
|
|
@@ -106,61 +110,100 @@ async function request(url, {
|
|
|
106
110
|
body = JSON.stringify(body);
|
|
107
111
|
if (body && !options.headers["Content-Length"])
|
|
108
112
|
options.headers["Content-Length"] = Buffer.byteLength(body);
|
|
109
|
-
return await new Promise(
|
|
113
|
+
return await new Promise((resolve, reject) => {
|
|
110
114
|
logger.debug("request %j", {
|
|
111
115
|
...options,
|
|
112
116
|
body
|
|
113
117
|
});
|
|
114
|
-
const req = protocol.request(options,
|
|
118
|
+
const req = protocol.request(options, (res) => {
|
|
115
119
|
if (downloadStream) {
|
|
116
|
-
res.pipe(downloadStream);
|
|
117
|
-
downloadStream.on("finish", () =>
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
stream.on("finish", () => resolve(void 0));
|
|
122
|
-
} else {
|
|
123
|
-
const raw = [];
|
|
124
|
-
res.on("data", (chunk) => {
|
|
125
|
-
raw.push(chunk);
|
|
120
|
+
res.pipe(downloadStream, { end: true });
|
|
121
|
+
downloadStream.on("finish", () => {
|
|
122
|
+
res.destroy();
|
|
123
|
+
downloadStream.end();
|
|
124
|
+
resolve(void 0);
|
|
126
125
|
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (downloadFile) {
|
|
129
|
+
logger.debug("downloadFile");
|
|
130
|
+
const stream2 = createWriteStream(downloadFile, { autoClose: true });
|
|
131
|
+
res.pipe(stream2, { end: true });
|
|
127
132
|
res.on("end", () => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
logger.debug("end");
|
|
134
|
+
res.destroy();
|
|
135
|
+
});
|
|
136
|
+
stream2.on("finish", () => {
|
|
137
|
+
stream2.end();
|
|
138
|
+
stream2.close();
|
|
139
|
+
logger.debug("finish");
|
|
140
|
+
});
|
|
141
|
+
stream2.on("close", () => {
|
|
142
|
+
logger.debug(
|
|
143
|
+
"finish",
|
|
144
|
+
res.closed,
|
|
145
|
+
res.destroyed,
|
|
146
|
+
stream2.destroyed,
|
|
147
|
+
stream2.closed,
|
|
148
|
+
req.closed,
|
|
149
|
+
req.destroyed
|
|
135
150
|
);
|
|
136
|
-
|
|
137
|
-
response.request = options;
|
|
138
|
-
response.request.body = body;
|
|
139
|
-
response.statusCode = res.statusCode;
|
|
140
|
-
response.statusMessage = res.statusMessage;
|
|
141
|
-
response.headers = res.headers;
|
|
142
|
-
response.body = data;
|
|
143
|
-
if (response.body && response.headers["content-type"] && response.headers["content-type"].includes("application/json"))
|
|
144
|
-
try {
|
|
145
|
-
response.body = (parse || JSON.parse)(response.body);
|
|
146
|
-
logger.debug("response.parse JSON");
|
|
147
|
-
} catch (error) {
|
|
148
|
-
console.warn("response plain body", response.body);
|
|
149
|
-
console.error(error);
|
|
150
|
-
}
|
|
151
|
-
if (response.statusCode >= 200 && response.statusCode < 400)
|
|
152
|
-
resolve(response);
|
|
153
|
-
else {
|
|
154
|
-
logger.debug("response.error %j", response);
|
|
155
|
-
reject(
|
|
156
|
-
new ResponseError(
|
|
157
|
-
`${res.statusMessage || res.statusCode} ${options.host}${options.path}`,
|
|
158
|
-
response
|
|
159
|
-
)
|
|
160
|
-
);
|
|
161
|
-
}
|
|
151
|
+
resolve(void 0);
|
|
162
152
|
});
|
|
153
|
+
return;
|
|
163
154
|
}
|
|
155
|
+
let stream = res;
|
|
156
|
+
switch (res.headers["content-encoding"]) {
|
|
157
|
+
case "br":
|
|
158
|
+
stream = res.pipe(createBrotliDecompress());
|
|
159
|
+
break;
|
|
160
|
+
case "gzip":
|
|
161
|
+
stream = res.pipe(createGunzip());
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
const raw = [];
|
|
165
|
+
stream.on("data", (chunk) => raw.push(chunk));
|
|
166
|
+
stream.on("end", () => {
|
|
167
|
+
const data = Buffer.concat(raw).toString();
|
|
168
|
+
logger.timeEnd(
|
|
169
|
+
url,
|
|
170
|
+
"response %s %s %s %j",
|
|
171
|
+
res.statusCode,
|
|
172
|
+
res.headers["content-type"],
|
|
173
|
+
res.headers["content-encoding"],
|
|
174
|
+
data
|
|
175
|
+
);
|
|
176
|
+
const response = /* @__PURE__ */ Object.create(null);
|
|
177
|
+
response.request = options;
|
|
178
|
+
response.request.body = body;
|
|
179
|
+
response.statusCode = res.statusCode;
|
|
180
|
+
response.statusMessage = res.statusMessage;
|
|
181
|
+
response.headers = res.headers;
|
|
182
|
+
response.body = data;
|
|
183
|
+
if (response.body && response.headers["content-type"] && response.headers["content-type"].includes("application/json"))
|
|
184
|
+
try {
|
|
185
|
+
response.body = (parse || JSON.parse)(response.body);
|
|
186
|
+
logger.debug("response.parse JSON");
|
|
187
|
+
} catch (error) {
|
|
188
|
+
console.warn("response plain body", response.body);
|
|
189
|
+
console.error(error);
|
|
190
|
+
}
|
|
191
|
+
if (response.statusCode >= 200 && response.statusCode < 400)
|
|
192
|
+
resolve(response);
|
|
193
|
+
else {
|
|
194
|
+
logger.debug("response.error %j", response);
|
|
195
|
+
reject(
|
|
196
|
+
new ResponseError(
|
|
197
|
+
`${res.statusMessage || res.statusCode} ${options.host}${options.path}`,
|
|
198
|
+
response
|
|
199
|
+
)
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
stream.on("error", (e) => {
|
|
204
|
+
logger.timeEnd(url, "response.error %j", e);
|
|
205
|
+
reject(e);
|
|
206
|
+
});
|
|
164
207
|
});
|
|
165
208
|
if (body)
|
|
166
209
|
req.write(body);
|
|
@@ -182,10 +225,15 @@ async function request(url, {
|
|
|
182
225
|
req.setHeader("Content-Length", multipartBody.length);
|
|
183
226
|
req.write(multipartBody);
|
|
184
227
|
}
|
|
185
|
-
req.on("error",
|
|
228
|
+
req.on("error", (e) => {
|
|
186
229
|
logger.timeEnd(url, "response.error %j", e);
|
|
187
230
|
reject(e);
|
|
188
231
|
});
|
|
232
|
+
req.on("timeout", () => {
|
|
233
|
+
logger.timeEnd(url, "response.timeout");
|
|
234
|
+
req.destroy();
|
|
235
|
+
reject(Error("timeout"));
|
|
236
|
+
});
|
|
189
237
|
logger.time(url);
|
|
190
238
|
req.end();
|
|
191
239
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faasjs/request",
|
|
3
|
-
"version": "0.0.4-beta.
|
|
3
|
+
"version": "0.0.4-beta.16",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@faasjs/logger": "0.0.4-beta.
|
|
24
|
+
"@faasjs/logger": "0.0.4-beta.16"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@faasjs/logger": "0.0.4-beta.
|
|
27
|
+
"@faasjs/logger": "0.0.4-beta.16"
|
|
28
28
|
},
|
|
29
29
|
"engines": {
|
|
30
30
|
"npm": ">=9.0.0",
|