@zero-server/fetch 1.0.2 → 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.
Files changed (2) hide show
  1. package/lib/fetch/index.js +18 -1
  2. package/package.json +2 -2
@@ -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.2",
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.2"
48
+ "@zero-server/sdk": ">=1.1.0"
49
49
  },
50
50
  "peerDependenciesMeta": {
51
51
  "@zero-server/sdk": {