@nxtedition/lib 15.0.41 → 15.0.43

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.
Files changed (2) hide show
  1. package/http.js +39 -18
  2. package/package.json +1 -1
package/http.js CHANGED
@@ -7,7 +7,6 @@ const compose = require('koa-compose')
7
7
  const http = require('http')
8
8
  const fp = require('lodash/fp')
9
9
  const tp = require('timers/promises')
10
- const { AbortError } = require('./errors')
11
10
 
12
11
  const ERR_HEADER_EXPR =
13
12
  /^(content-length|content-type|te|host|upgrade|trailers|connection|keep-alive|http2-settings|transfer-encoding|proxy-connection|proxy-authenticate|proxy-authorization)$/i
@@ -60,19 +59,34 @@ module.exports.request = async function request(ctx, next) {
60
59
  reqLogger.trace({ req }, 'request started')
61
60
  }
62
61
 
63
- const onClose = () => queueMicrotask(() => ac.abort())
64
- const onTimeout = () => res.destroy(new createError.RequestTimeout())
65
- const onError = (err) => ac.abort(err)
66
-
67
- res.on('close', onClose).on('timeout', onTimeout).on('error', onError)
68
-
69
- req.on('timeout', onTimeout).on('error', onError)
70
-
71
- await next()
62
+ await Promise.all([
63
+ next(),
64
+ new Promise((resolve, reject) => {
65
+ res
66
+ .on('timeout', function () {
67
+ this.destroy(new createError.RequestTimeout())
68
+ })
69
+ .on('error', (err) => {
70
+ reqLogger.error({ err }, 'response error')
71
+ reject(err)
72
+ })
73
+ .on('close', () => {
74
+ reqLogger.debug('response closed')
75
+ resolve(null)
76
+ })
72
77
 
73
- if (!res.writableEnded && res.destroyed) {
74
- throw new AbortError()
75
- }
78
+ req
79
+ .on('timeout', function () {
80
+ this.destroy(new createError.RequestTimeout())
81
+ })
82
+ .on('error', (err) => {
83
+ reqLogger.error({ err }, 'request error')
84
+ })
85
+ .on('close', () => {
86
+ reqLogger.debug('request closed')
87
+ })
88
+ }),
89
+ ])
76
90
 
77
91
  assert(res.writableEnded)
78
92
  assert(res.statusCode)
@@ -90,7 +104,10 @@ module.exports.request = async function request(ctx, next) {
90
104
  } else {
91
105
  reqLogger.trace('request completed')
92
106
  }
107
+
108
+ ac.abort()
93
109
  } catch (err) {
110
+ const reason = ac.signal.reason
94
111
  const responseTime = Math.round(performance.now() - startTime)
95
112
 
96
113
  req.on('error', (err) => {
@@ -131,7 +148,8 @@ module.exports.request = async function request(ctx, next) {
131
148
  res.write(JSON.stringify(err.body))
132
149
  }
133
150
 
134
- reqLogger = reqLogger.child({ res, err, responseTime })
151
+ reqLogger = reqLogger.child({ res, err, reason, responseTime })
152
+
135
153
  if (res.statusCode < 500) {
136
154
  reqLogger.warn('request failed')
137
155
  } else {
@@ -142,13 +160,14 @@ module.exports.request = async function request(ctx, next) {
142
160
 
143
161
  res.end()
144
162
  } else {
145
- reqLogger = reqLogger.child({ res, err, responseTime })
163
+ reqLogger = reqLogger.child({ res, err, reason, responseTime })
164
+
146
165
  if (req.aborted || err.name === 'AbortError') {
147
- reqLogger.debug({ err }, 'request aborted')
166
+ reqLogger.debug('request aborted')
148
167
  } else if (err.statusCode < 500) {
149
- reqLogger.warn({ err }, 'request failed')
168
+ reqLogger.warn('request failed')
150
169
  } else {
151
- reqLogger.error({ err }, 'request error')
170
+ reqLogger.error('request error')
152
171
  }
153
172
 
154
173
  if (res.writableEnded) {
@@ -158,6 +177,8 @@ module.exports.request = async function request(ctx, next) {
158
177
  res.destroy()
159
178
  }
160
179
  }
180
+
181
+ ac.abort(err)
161
182
  }
162
183
  }
163
184
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/lib",
3
- "version": "15.0.41",
3
+ "version": "15.0.43",
4
4
  "license": "MIT",
5
5
  "author": "Robert Nagy <robert.nagy@boffins.se>",
6
6
  "files": [