@zero-server/fetch 1.0.1 → 1.1.0
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/fetch/index.js +18 -1
- package/package.json +2 -2
package/lib/fetch/index.js
CHANGED
|
@@ -10,13 +10,24 @@ const { URL } = require('url');
|
|
|
10
10
|
|
|
11
11
|
const STATUS_CODES = http.STATUS_CODES;
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Default `User-Agent` sent when a request does not specify one.
|
|
15
|
+
* Many APIs (e.g. GitHub) reject requests without a User-Agent, so a sensible
|
|
16
|
+
* default avoids surprising 403s. Override per request via `opts.headers`.
|
|
17
|
+
* @private
|
|
18
|
+
*/
|
|
19
|
+
let DEFAULT_USER_AGENT;
|
|
20
|
+
try { DEFAULT_USER_AGENT = `zero-server/${require('../../package.json').version}`; }
|
|
21
|
+
catch (e) { DEFAULT_USER_AGENT = 'zero-server'; }
|
|
22
|
+
|
|
13
23
|
/**
|
|
14
24
|
* Perform an HTTP(S) request.
|
|
15
25
|
*
|
|
16
26
|
* @param {string} url - Absolute URL to fetch.
|
|
17
27
|
* @param {object} [opts] - Configuration options.
|
|
18
28
|
* @param {string} [opts.method='GET'] - HTTP method.
|
|
19
|
-
* @param {object} [opts.headers] - Request headers.
|
|
29
|
+
* @param {object} [opts.headers] - Request headers. A default
|
|
30
|
+
* `User-Agent` of `zero-server/<version>` is sent unless one is provided here.
|
|
20
31
|
* @param {string|Buffer|object|ReadableStream} [opts.body] - Request body.
|
|
21
32
|
* @param {number} [opts.timeout] - Request timeout in ms.
|
|
22
33
|
* @param {AbortSignal} [opts.signal] - Abort signal for cancellation.
|
|
@@ -59,6 +70,12 @@ function miniFetch(url, opts = {})
|
|
|
59
70
|
const method = (opts.method || 'GET').toUpperCase();
|
|
60
71
|
const headers = Object.assign({}, opts.headers || {});
|
|
61
72
|
|
|
73
|
+
// Send a default User-Agent unless the caller supplied one (any case).
|
|
74
|
+
if (!Object.keys(headers).some(h => h.toLowerCase() === 'user-agent'))
|
|
75
|
+
{
|
|
76
|
+
headers['User-Agent'] = DEFAULT_USER_AGENT;
|
|
77
|
+
}
|
|
78
|
+
|
|
62
79
|
// Normalize body
|
|
63
80
|
let body = opts.body;
|
|
64
81
|
if (body && typeof body === 'object' && typeof body.toString === 'function' && body.constructor && body.constructor.name === 'URLSearchParams')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zero-server/fetch",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Server-side fetch with mTLS, timeouts, AbortSignal.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"zero-server",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"sideEffects": false,
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@zero-server/sdk": ">=1.0
|
|
48
|
+
"@zero-server/sdk": ">=1.1.0"
|
|
49
49
|
},
|
|
50
50
|
"peerDependenciesMeta": {
|
|
51
51
|
"@zero-server/sdk": {
|