@nxtedition/lib 21.2.2 → 21.3.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/couch.js +5 -1
- package/http.js +46 -22
- package/package.json +1 -1
package/couch.js
CHANGED
|
@@ -117,6 +117,7 @@ export function makeCouch(opts) {
|
|
|
117
117
|
* @param {number} [options.heartbeat=60000] - The interval at which to send a heartbeat.
|
|
118
118
|
* @param {function} [options.retry=null] - The function to retry the request on error.
|
|
119
119
|
* @param {string} [options.since=null] - The sequence number to start from.
|
|
120
|
+
* @param {string} [options.highWaterMark=128 * 1024] - Buffering.
|
|
120
121
|
* @yields {Array<{ id: string, seq?: string, doc?: Object, deleted?: boolean, changes: Array<{ rev: string }> }>}
|
|
121
122
|
*/
|
|
122
123
|
async function* changes({ client = defaultClient, signal = null, logger, ...options } = {}) {
|
|
@@ -207,6 +208,7 @@ export function makeCouch(opts) {
|
|
|
207
208
|
}
|
|
208
209
|
}
|
|
209
210
|
|
|
211
|
+
const highWaterMark = options.highWaterMark
|
|
210
212
|
const live = options.live == null || !!options.live
|
|
211
213
|
const retry =
|
|
212
214
|
options.retry ??
|
|
@@ -220,6 +222,7 @@ export function makeCouch(opts) {
|
|
|
220
222
|
method,
|
|
221
223
|
live,
|
|
222
224
|
retry,
|
|
225
|
+
highWaterMark,
|
|
223
226
|
params,
|
|
224
227
|
body,
|
|
225
228
|
signal: ac.signal,
|
|
@@ -245,6 +248,7 @@ export function makeCouch(opts) {
|
|
|
245
248
|
body,
|
|
246
249
|
signal,
|
|
247
250
|
client,
|
|
251
|
+
highWaterMark = 128 * 1024,
|
|
248
252
|
blocking = live || !params.limit || params.limit > 256,
|
|
249
253
|
}) {
|
|
250
254
|
let retryCount = 0
|
|
@@ -270,7 +274,7 @@ export function makeCouch(opts) {
|
|
|
270
274
|
signal,
|
|
271
275
|
headersTimeout: 2 * 60e3,
|
|
272
276
|
bodyTimeout: 2 * (params.heartbeat || 60e3),
|
|
273
|
-
highWaterMark
|
|
277
|
+
highWaterMark,
|
|
274
278
|
dispatcher: client,
|
|
275
279
|
}
|
|
276
280
|
|
package/http.js
CHANGED
|
@@ -116,7 +116,9 @@ export async function request2(ctx, next) {
|
|
|
116
116
|
|
|
117
117
|
const isHealthcheck = req.url === '/healthcheck' || req.url === '/_up'
|
|
118
118
|
|
|
119
|
-
if (
|
|
119
|
+
if (isHealthcheck) {
|
|
120
|
+
// Do nothing...
|
|
121
|
+
} else {
|
|
120
122
|
logger.debug({ req }, 'request started')
|
|
121
123
|
}
|
|
122
124
|
|
|
@@ -132,6 +134,7 @@ export async function request2(ctx, next) {
|
|
|
132
134
|
// Do nothing...
|
|
133
135
|
} else if (!res.writableEnded) {
|
|
134
136
|
logger.debug({ res, elapsedTime }, 'request aborted')
|
|
137
|
+
res.destroy()
|
|
135
138
|
} else if (res.statusCode >= 500) {
|
|
136
139
|
logger.error({ res, elapsedTime }, 'request error')
|
|
137
140
|
} else if (res.statusCode >= 400) {
|
|
@@ -143,12 +146,12 @@ export async function request2(ctx, next) {
|
|
|
143
146
|
ctx[kAbortController]?.abort(err)
|
|
144
147
|
|
|
145
148
|
const statusCode = err.statusCode || err.$metadata?.httpStatusCode || 500
|
|
146
|
-
const
|
|
149
|
+
const elapsedTime = Math.ceil(performance.now() - startTime)
|
|
147
150
|
|
|
148
151
|
if (!res.headersSent && !res.destroyed) {
|
|
149
152
|
res.statusCode = statusCode
|
|
150
153
|
|
|
151
|
-
let reqId = req?.id || err.id
|
|
154
|
+
let reqId = ctx.id || req?.id || err.id
|
|
152
155
|
for (const name of res.getHeaderNames()) {
|
|
153
156
|
if (!reqId && name === 'request-id') {
|
|
154
157
|
reqId = res.getHeader(name)
|
|
@@ -160,8 +163,20 @@ export async function request2(ctx, next) {
|
|
|
160
163
|
res.setHeader('request-id', reqId)
|
|
161
164
|
}
|
|
162
165
|
|
|
163
|
-
|
|
164
|
-
|
|
166
|
+
const { headers } = err
|
|
167
|
+
|
|
168
|
+
if (fp.isPlainObject(headers)) {
|
|
169
|
+
for (const [key, val] of Object.entries(headers)) {
|
|
170
|
+
if (!ERR_HEADER_EXPR.test(key)) {
|
|
171
|
+
res.setHeader(key, val)
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} else if (Array.isArray(err.headers)) {
|
|
175
|
+
assert(headers.length % 2 === 0)
|
|
176
|
+
assert(headers.length === 0 || typeof headers[0] === 'string')
|
|
177
|
+
for (let n = 0; n < headers.length; n += 2) {
|
|
178
|
+
const key = headers[n + 0]
|
|
179
|
+
const val = headers[n + 1]
|
|
165
180
|
if (!ERR_HEADER_EXPR.test(key)) {
|
|
166
181
|
res.setHeader(key, val)
|
|
167
182
|
}
|
|
@@ -170,23 +185,27 @@ export async function request2(ctx, next) {
|
|
|
170
185
|
|
|
171
186
|
if (fp.isPlainObject(err.body)) {
|
|
172
187
|
res.setHeader('content-type', 'application/json')
|
|
173
|
-
res.
|
|
188
|
+
res.end(JSON.stringify(err.body))
|
|
189
|
+
} else if (typeof err.body === 'string') {
|
|
190
|
+
res.end(err.body)
|
|
191
|
+
} else if (Buffer.isBuffer(err.body)) {
|
|
192
|
+
res.end(err.body)
|
|
193
|
+
} else {
|
|
194
|
+
res.end()
|
|
174
195
|
}
|
|
175
196
|
|
|
176
197
|
if (statusCode < 500) {
|
|
177
|
-
logger.warn({ req, res, err,
|
|
198
|
+
logger.warn({ req, res, err, elapsedTime }, 'request failed')
|
|
178
199
|
} else {
|
|
179
|
-
logger.error({ req, res, err,
|
|
200
|
+
logger.error({ req, res, err, elapsedTime }, 'request error')
|
|
180
201
|
}
|
|
181
|
-
|
|
182
|
-
res.end()
|
|
183
202
|
} else {
|
|
184
203
|
if (req.aborted || !res.writableEnded || err.name === 'AbortError') {
|
|
185
|
-
logger.debug({ req, res, err,
|
|
204
|
+
logger.debug({ req, res, err, elapsedTime }, 'request aborted')
|
|
186
205
|
} else if (statusCode < 500) {
|
|
187
|
-
logger.warn({ req, res, err,
|
|
206
|
+
logger.warn({ req, res, err, elapsedTime }, 'request failed')
|
|
188
207
|
} else {
|
|
189
|
-
logger.error({ req, res, err,
|
|
208
|
+
logger.error({ req, res, err, elapsedTime }, 'request error')
|
|
190
209
|
}
|
|
191
210
|
|
|
192
211
|
if (!res.writableEnded) {
|
|
@@ -248,6 +267,7 @@ export async function request(ctx, next) {
|
|
|
248
267
|
// Do nothing...
|
|
249
268
|
} else if (!res.writableEnded) {
|
|
250
269
|
reqLogger.debug({ res, elapsedTime }, 'request aborted')
|
|
270
|
+
res.destroy()
|
|
251
271
|
} else if (res.statusCode >= 500) {
|
|
252
272
|
reqLogger.error({ res, elapsedTime }, 'request error')
|
|
253
273
|
} else if (res.statusCode >= 400) {
|
|
@@ -259,7 +279,7 @@ export async function request(ctx, next) {
|
|
|
259
279
|
ac?.abort(err)
|
|
260
280
|
|
|
261
281
|
const statusCode = err.statusCode || err.$metadata?.httpStatusCode || 500
|
|
262
|
-
const
|
|
282
|
+
const elapsedTime = Math.ceil(performance.now() - startTime)
|
|
263
283
|
|
|
264
284
|
if (!res.headersSent && !res.destroyed) {
|
|
265
285
|
res.statusCode = statusCode
|
|
@@ -286,23 +306,27 @@ export async function request(ctx, next) {
|
|
|
286
306
|
|
|
287
307
|
if (fp.isPlainObject(err.body)) {
|
|
288
308
|
res.setHeader('content-type', 'application/json')
|
|
289
|
-
res.
|
|
309
|
+
res.end(JSON.stringify(err.body))
|
|
310
|
+
} else if (typeof err.body === 'string') {
|
|
311
|
+
res.end(err.body)
|
|
312
|
+
} else if (Buffer.isBuffer(err.body)) {
|
|
313
|
+
res.end(err.body)
|
|
314
|
+
} else {
|
|
315
|
+
res.end()
|
|
290
316
|
}
|
|
291
317
|
|
|
292
318
|
if (statusCode < 500) {
|
|
293
|
-
reqLogger.warn({ res, err,
|
|
319
|
+
reqLogger.warn({ res, err, elapsedTime }, 'request failed')
|
|
294
320
|
} else {
|
|
295
|
-
reqLogger.error({ res, err,
|
|
321
|
+
reqLogger.error({ res, err, elapsedTime }, 'request error')
|
|
296
322
|
}
|
|
297
|
-
|
|
298
|
-
res.end()
|
|
299
323
|
} else {
|
|
300
324
|
if (req.aborted || !res.writableEnded || err.name === 'AbortError') {
|
|
301
|
-
reqLogger.debug({ res, err,
|
|
325
|
+
reqLogger.debug({ res, err, elapsedTime }, 'request aborted')
|
|
302
326
|
} else if (statusCode < 500) {
|
|
303
|
-
reqLogger.warn({ res, err,
|
|
327
|
+
reqLogger.warn({ res, err, elapsedTime }, 'request failed')
|
|
304
328
|
} else {
|
|
305
|
-
reqLogger.error({ res, err,
|
|
329
|
+
reqLogger.error({ res, err, elapsedTime }, 'request error')
|
|
306
330
|
}
|
|
307
331
|
|
|
308
332
|
if (!res.writableEnded) {
|