@faasjs/request 0.0.4-beta.15 → 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 CHANGED
@@ -1,4 +1,4 @@
1
- import * as http from 'http';
1
+ import * as http from 'node:http';
2
2
  import { Logger } from '@faasjs/logger';
3
3
 
4
4
  type Request = {
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as http from 'http';
1
+ import * as http from 'node:http';
2
2
  import { Logger } from '@faasjs/logger';
3
3
 
4
4
  type Request = {
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(function(resolve, reject) {
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, function(res) {
141
+ const req = protocol.request(options, (res) => {
138
142
  if (downloadStream) {
139
- res.pipe(downloadStream);
140
- downloadStream.on("finish", () => resolve(void 0));
141
- } else if (downloadFile) {
142
- const stream = fs.createWriteStream(downloadFile);
143
- res.pipe(stream);
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
- const data = Buffer.concat(raw).toString();
152
- logger$1.timeEnd(
153
- url$1,
154
- "response %s %s %s",
155
- res.statusCode,
156
- res.headers["content-type"],
157
- data
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
- const response = /* @__PURE__ */ Object.create(null);
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", function(e) {
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(function(resolve, reject) {
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, function(res) {
118
+ const req = protocol.request(options, (res) => {
115
119
  if (downloadStream) {
116
- res.pipe(downloadStream);
117
- downloadStream.on("finish", () => resolve(void 0));
118
- } else if (downloadFile) {
119
- const stream = createWriteStream(downloadFile);
120
- res.pipe(stream);
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
- const data = Buffer.concat(raw).toString();
129
- logger.timeEnd(
130
- url,
131
- "response %s %s %s",
132
- res.statusCode,
133
- res.headers["content-type"],
134
- data
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
- const response = /* @__PURE__ */ Object.create(null);
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", function(e) {
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.15",
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.15"
24
+ "@faasjs/logger": "0.0.4-beta.16"
25
25
  },
26
26
  "devDependencies": {
27
- "@faasjs/logger": "0.0.4-beta.15"
27
+ "@faasjs/logger": "0.0.4-beta.16"
28
28
  },
29
29
  "engines": {
30
30
  "npm": ">=9.0.0",