@nxtedition/nxt-undici 6.0.23 → 6.1.1
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/lib/index.js
CHANGED
|
@@ -59,6 +59,7 @@ function wrapDispatch(dispatcher) {
|
|
|
59
59
|
if (wrappedDispatcher == null) {
|
|
60
60
|
wrappedDispatcher = compose(
|
|
61
61
|
dispatcher,
|
|
62
|
+
interceptors.log({ bindings: { intercept: 'upstream' } }),
|
|
62
63
|
interceptors.responseError(),
|
|
63
64
|
interceptors.requestBodyFactory(),
|
|
64
65
|
interceptors.dns(),
|
|
@@ -69,7 +70,7 @@ function wrapDispatch(dispatcher) {
|
|
|
69
70
|
interceptors.proxy(),
|
|
70
71
|
interceptors.cache(),
|
|
71
72
|
interceptors.redirect(),
|
|
72
|
-
interceptors.log(),
|
|
73
|
+
interceptors.log({ bindings: { intercept: 'downstream' } }),
|
|
73
74
|
(dispatch) => (opts, handler) => {
|
|
74
75
|
const headers = parseHeaders(opts.headers)
|
|
75
76
|
|
package/lib/interceptor/cache.js
CHANGED
|
@@ -55,11 +55,17 @@ class CacheHandler extends DecoratorHandler {
|
|
|
55
55
|
return super.onHeaders(statusCode, headers, resume)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
if (cacheControlDirectives['must-understand']) {
|
|
59
|
+
// Do nothing. We only cache responses that we understand...
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (cacheControlDirectives['no-transform']) {
|
|
63
|
+
// Do nothing. We don't transform responses...
|
|
64
|
+
}
|
|
65
|
+
|
|
58
66
|
if (
|
|
59
|
-
cacheControlDirectives['no-transform'] ||
|
|
60
67
|
cacheControlDirectives['must-revalidate'] ||
|
|
61
68
|
cacheControlDirectives['proxy-revalidate'] ||
|
|
62
|
-
cacheControlDirectives['must-understand'] ||
|
|
63
69
|
cacheControlDirectives['stale-while-revalidate'] ||
|
|
64
70
|
cacheControlDirectives['stale-if-error'] ||
|
|
65
71
|
cacheControlDirectives['no-cache']
|
|
@@ -142,12 +148,15 @@ export default () => (dispatch) => (opts, handler) => {
|
|
|
142
148
|
|
|
143
149
|
const cacheControlDirectives = parseCacheControl(opts?.headers['cache-control']) ?? {}
|
|
144
150
|
|
|
151
|
+
if (cacheControlDirectives['no-transform']) {
|
|
152
|
+
// Do nothing. We don't transform requests...
|
|
153
|
+
}
|
|
154
|
+
|
|
145
155
|
if (
|
|
146
156
|
cacheControlDirectives['max-age'] ||
|
|
147
157
|
cacheControlDirectives['max-stale'] ||
|
|
148
158
|
cacheControlDirectives['min-fresh'] ||
|
|
149
159
|
cacheControlDirectives['no-cache'] ||
|
|
150
|
-
cacheControlDirectives['no-transform'] ||
|
|
151
160
|
cacheControlDirectives['stale-if-error']
|
|
152
161
|
) {
|
|
153
162
|
// TODO (fix): Support all cache control directives...
|
package/lib/interceptor/dns.js
CHANGED
|
@@ -36,12 +36,14 @@ export default () => (dispatch) => {
|
|
|
36
36
|
const cache = new Map()
|
|
37
37
|
const promises = new Map()
|
|
38
38
|
|
|
39
|
-
function resolve(resolve4,
|
|
39
|
+
function resolve(hostname, { resolve4, logger }) {
|
|
40
40
|
let promise = promises.get(hostname)
|
|
41
41
|
if (!promise) {
|
|
42
|
+
logger?.debug({ dns: { hostname } }, 'lookup started')
|
|
42
43
|
promise = new Promise((resolve) =>
|
|
43
44
|
resolve4(hostname, { ttl: true }, (err, records) => {
|
|
44
45
|
if (err) {
|
|
46
|
+
logger?.error({ err, dns: { hostname } }, 'lookup failed')
|
|
45
47
|
resolve([err, null])
|
|
46
48
|
} else {
|
|
47
49
|
const now = getFastNow()
|
|
@@ -53,6 +55,8 @@ export default () => (dispatch) => {
|
|
|
53
55
|
counter: 0,
|
|
54
56
|
}))
|
|
55
57
|
|
|
58
|
+
logger?.debug({ err, dns: { records } }, 'lookup completed')
|
|
59
|
+
|
|
56
60
|
cache.set(hostname, val)
|
|
57
61
|
|
|
58
62
|
resolve([null, val])
|
|
@@ -85,9 +89,10 @@ export default () => (dispatch) => {
|
|
|
85
89
|
let records = cache.get(hostname)
|
|
86
90
|
|
|
87
91
|
const resolve4 = opts.dns.resolve4 || dns.resolve4
|
|
92
|
+
const logger = opts.dns.logger ?? opts.logger
|
|
88
93
|
|
|
89
94
|
if (records == null || records.every((x) => x.expires < now)) {
|
|
90
|
-
const [err, val] = await resolve(resolve4,
|
|
95
|
+
const [err, val] = await resolve(hostname, { resolve4, logger })
|
|
91
96
|
|
|
92
97
|
if (err) {
|
|
93
98
|
throw err
|
|
@@ -97,7 +102,7 @@ export default () => (dispatch) => {
|
|
|
97
102
|
|
|
98
103
|
records = val
|
|
99
104
|
} else if (records.some((x) => x.expires < now + 1e3)) {
|
|
100
|
-
resolve(resolve4,
|
|
105
|
+
resolve(hostname, { resolve4, logger })
|
|
101
106
|
}
|
|
102
107
|
|
|
103
108
|
records.sort(
|
package/lib/interceptor/log.js
CHANGED
|
@@ -19,12 +19,16 @@ class Handler extends DecoratorHandler {
|
|
|
19
19
|
#statusCode
|
|
20
20
|
#headers
|
|
21
21
|
|
|
22
|
-
constructor(opts, { handler }) {
|
|
22
|
+
constructor(logOpts, opts, { handler }) {
|
|
23
23
|
super(handler)
|
|
24
24
|
|
|
25
25
|
this.#opts = opts
|
|
26
26
|
this.#logger = opts.logger.child({ ureq: opts })
|
|
27
27
|
|
|
28
|
+
if (logOpts?.bindings) {
|
|
29
|
+
this.#logger = this.#logger.child(logOpts?.bindings)
|
|
30
|
+
}
|
|
31
|
+
|
|
28
32
|
this.#created = performance.now()
|
|
29
33
|
}
|
|
30
34
|
|
|
@@ -128,5 +132,5 @@ class Handler extends DecoratorHandler {
|
|
|
128
132
|
}
|
|
129
133
|
}
|
|
130
134
|
|
|
131
|
-
export default () => (dispatch) => (opts, handler) =>
|
|
132
|
-
opts.logger ? dispatch(opts, new Handler(opts, { handler })) : dispatch(opts, handler)
|
|
135
|
+
export default (logOpts) => (dispatch) => (opts, handler) =>
|
|
136
|
+
opts.logger ? dispatch(opts, new Handler(logOpts, opts, { handler })) : dispatch(opts, handler)
|
|
@@ -178,7 +178,7 @@ class Handler extends DecoratorHandler {
|
|
|
178
178
|
this.#onError(this.#error)
|
|
179
179
|
} else if (!this.#headersSent) {
|
|
180
180
|
this.#retryCount++
|
|
181
|
-
this.#opts.logger?.debug({ retryCount: this.#retryCount }, 'retry response headers')
|
|
181
|
+
this.#opts.logger?.debug({ err, retryCount: this.#retryCount }, 'retry response headers')
|
|
182
182
|
this.#dispatch(this.#opts, this)
|
|
183
183
|
} else {
|
|
184
184
|
assert(Number.isFinite(this.#pos))
|
|
@@ -196,7 +196,7 @@ class Handler extends DecoratorHandler {
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
this.#retryCount++
|
|
199
|
-
this.#opts.logger?.debug({ retryCount: this.#retryCount }, 'retry response body')
|
|
199
|
+
this.#opts.logger?.debug({ err, retryCount: this.#retryCount }, 'retry response body')
|
|
200
200
|
this.#dispatch(this.#opts, this)
|
|
201
201
|
}
|
|
202
202
|
})
|