tlsd 2.4.1 → 2.6.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 (76) hide show
  1. package/README.md +26 -3
  2. package/domains/README.txt +0 -0
  3. package/inchtml.js +40 -0
  4. package/package.json +2 -1
  5. package/proxy/config.json +5 -0
  6. package/proxy/package-lock.json +118 -0
  7. package/proxy/package.json +15 -0
  8. package/proxy/proxy.js +20 -0
  9. package/proxy/siriusmercantile.com/index.js +14 -0
  10. package/proxy/siriusmercantile.com/package-lock.json +137 -0
  11. package/proxy/siriusmercantile.com/package.json +7 -0
  12. package/proxy/zzz/was-nm/debug/CHANGELOG.md +395 -0
  13. package/proxy/zzz/was-nm/debug/LICENSE +19 -0
  14. package/proxy/zzz/was-nm/debug/README.md +437 -0
  15. package/proxy/zzz/was-nm/debug/dist/debug.js +886 -0
  16. package/proxy/zzz/was-nm/debug/node.js +1 -0
  17. package/proxy/zzz/was-nm/debug/package.json +90 -0
  18. package/proxy/zzz/was-nm/debug/src/browser.js +180 -0
  19. package/proxy/zzz/was-nm/debug/src/common.js +249 -0
  20. package/proxy/zzz/was-nm/debug/src/index.js +12 -0
  21. package/proxy/zzz/was-nm/debug/src/node.js +174 -0
  22. package/proxy/zzz/was-nm/eventemitter3/LICENSE +21 -0
  23. package/proxy/zzz/was-nm/eventemitter3/README.md +92 -0
  24. package/proxy/zzz/was-nm/eventemitter3/index.d.ts +67 -0
  25. package/proxy/zzz/was-nm/eventemitter3/index.js +336 -0
  26. package/proxy/zzz/was-nm/eventemitter3/package.json +84 -0
  27. package/proxy/zzz/was-nm/eventemitter3/umd/eventemitter3.js +340 -0
  28. package/proxy/zzz/was-nm/eventemitter3/umd/eventemitter3.min.js +1 -0
  29. package/proxy/zzz/was-nm/eventemitter3/umd/eventemitter3.min.js.map +1 -0
  30. package/proxy/zzz/was-nm/follow-redirects/LICENSE +18 -0
  31. package/proxy/zzz/was-nm/follow-redirects/README.md +145 -0
  32. package/proxy/zzz/was-nm/follow-redirects/http.js +1 -0
  33. package/proxy/zzz/was-nm/follow-redirects/https.js +1 -0
  34. package/proxy/zzz/was-nm/follow-redirects/index.js +452 -0
  35. package/proxy/zzz/was-nm/follow-redirects/package.json +87 -0
  36. package/proxy/zzz/was-nm/http-proxy/.auto-changelog +6 -0
  37. package/proxy/zzz/was-nm/http-proxy/.gitattributes +1 -0
  38. package/proxy/zzz/was-nm/http-proxy/CHANGELOG.md +1864 -0
  39. package/proxy/zzz/was-nm/http-proxy/CODE_OF_CONDUCT.md +74 -0
  40. package/proxy/zzz/was-nm/http-proxy/LICENSE +23 -0
  41. package/proxy/zzz/was-nm/http-proxy/README.md +568 -0
  42. package/proxy/zzz/was-nm/http-proxy/codecov.yml +10 -0
  43. package/proxy/zzz/was-nm/http-proxy/index.js +13 -0
  44. package/proxy/zzz/was-nm/http-proxy/lib/http-proxy/common.js +248 -0
  45. package/proxy/zzz/was-nm/http-proxy/lib/http-proxy/index.js +185 -0
  46. package/proxy/zzz/was-nm/http-proxy/lib/http-proxy/passes/web-incoming.js +192 -0
  47. package/proxy/zzz/was-nm/http-proxy/lib/http-proxy/passes/web-outgoing.js +147 -0
  48. package/proxy/zzz/was-nm/http-proxy/lib/http-proxy/passes/ws-incoming.js +162 -0
  49. package/proxy/zzz/was-nm/http-proxy/lib/http-proxy.js +66 -0
  50. package/proxy/zzz/was-nm/http-proxy/package.json +77 -0
  51. package/proxy/zzz/was-nm/http-proxy/renovate.json +19 -0
  52. package/proxy/zzz/was-nm/ms/index.js +162 -0
  53. package/proxy/zzz/was-nm/ms/license.md +21 -0
  54. package/proxy/zzz/was-nm/ms/package.json +69 -0
  55. package/proxy/zzz/was-nm/ms/readme.md +60 -0
  56. package/proxy/zzz/was-nm/requires-port/.travis.yml +19 -0
  57. package/proxy/zzz/was-nm/requires-port/LICENSE +22 -0
  58. package/proxy/zzz/was-nm/requires-port/README.md +47 -0
  59. package/proxy/zzz/was-nm/requires-port/index.js +38 -0
  60. package/proxy/zzz/was-nm/requires-port/package.json +74 -0
  61. package/proxy/zzz/was-nm/requires-port/test.js +98 -0
  62. package/proxy/zzz/was-nm/sleepless/README.md +4 -0
  63. package/proxy/zzz/was-nm/sleepless/autosite/README.txt +0 -0
  64. package/proxy/zzz/was-nm/sleepless/autosite/site/foobar.txt +1 -0
  65. package/proxy/zzz/was-nm/sleepless/autosite/site/pull.php +4 -0
  66. package/proxy/zzz/was-nm/sleepless/index.js +2 -0
  67. package/proxy/zzz/was-nm/sleepless/package.json +44 -0
  68. package/proxy/zzz/was-nm/sleepless/sleepless.js +613 -0
  69. package/proxy/zzz/was-nm/sleepless/test.html +9 -0
  70. package/proxy/zzz/was-nm/sleepless/test.js +146 -0
  71. package/server_static/rpc/rpc.js +2 -5
  72. package/test.html +4 -0
  73. package/tlsd +11 -2
  74. package/tlsd.js +16 -14
  75. package/foo/rpc/index.js +0 -13
  76. package/foo/static/index.html +0 -15
@@ -0,0 +1,452 @@
1
+ var url = require("url");
2
+ var URL = url.URL;
3
+ var http = require("http");
4
+ var https = require("https");
5
+ var assert = require("assert");
6
+ var Writable = require("stream").Writable;
7
+ var debug = require("debug")("follow-redirects");
8
+
9
+ // RFC7231§4.2.1: Of the request methods defined by this specification,
10
+ // the GET, HEAD, OPTIONS, and TRACE methods are defined to be safe.
11
+ var SAFE_METHODS = { GET: true, HEAD: true, OPTIONS: true, TRACE: true };
12
+
13
+ // Create handlers that pass events from native requests
14
+ var eventHandlers = Object.create(null);
15
+ ["abort", "aborted", "connect", "error", "socket", "timeout"].forEach(function (event) {
16
+ eventHandlers[event] = function (arg1, arg2, arg3) {
17
+ this._redirectable.emit(event, arg1, arg2, arg3);
18
+ };
19
+ });
20
+
21
+ // An HTTP(S) request that can be redirected
22
+ function RedirectableRequest(options, responseCallback) {
23
+ // Initialize the request
24
+ Writable.call(this);
25
+ this._sanitizeOptions(options);
26
+ this._options = options;
27
+ this._ended = false;
28
+ this._ending = false;
29
+ this._redirectCount = 0;
30
+ this._redirects = [];
31
+ this._requestBodyLength = 0;
32
+ this._requestBodyBuffers = [];
33
+
34
+ // Attach a callback if passed
35
+ if (responseCallback) {
36
+ this.on("response", responseCallback);
37
+ }
38
+
39
+ // React to responses of native requests
40
+ var self = this;
41
+ this._onNativeResponse = function (response) {
42
+ self._processResponse(response);
43
+ };
44
+
45
+ // Perform the first request
46
+ this._performRequest();
47
+ }
48
+ RedirectableRequest.prototype = Object.create(Writable.prototype);
49
+
50
+ // Writes buffered data to the current native request
51
+ RedirectableRequest.prototype.write = function (data, encoding, callback) {
52
+ // Writing is not allowed if end has been called
53
+ if (this._ending) {
54
+ throw new Error("write after end");
55
+ }
56
+
57
+ // Validate input and shift parameters if necessary
58
+ if (!(typeof data === "string" || typeof data === "object" && ("length" in data))) {
59
+ throw new Error("data should be a string, Buffer or Uint8Array");
60
+ }
61
+ if (typeof encoding === "function") {
62
+ callback = encoding;
63
+ encoding = null;
64
+ }
65
+
66
+ // Ignore empty buffers, since writing them doesn't invoke the callback
67
+ // https://github.com/nodejs/node/issues/22066
68
+ if (data.length === 0) {
69
+ if (callback) {
70
+ callback();
71
+ }
72
+ return;
73
+ }
74
+ // Only write when we don't exceed the maximum body length
75
+ if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {
76
+ this._requestBodyLength += data.length;
77
+ this._requestBodyBuffers.push({ data: data, encoding: encoding });
78
+ this._currentRequest.write(data, encoding, callback);
79
+ }
80
+ // Error when we exceed the maximum body length
81
+ else {
82
+ this.emit("error", new Error("Request body larger than maxBodyLength limit"));
83
+ this.abort();
84
+ }
85
+ };
86
+
87
+ // Ends the current native request
88
+ RedirectableRequest.prototype.end = function (data, encoding, callback) {
89
+ // Shift parameters if necessary
90
+ if (typeof data === "function") {
91
+ callback = data;
92
+ data = encoding = null;
93
+ }
94
+ else if (typeof encoding === "function") {
95
+ callback = encoding;
96
+ encoding = null;
97
+ }
98
+
99
+ // Write data if needed and end
100
+ if (!data) {
101
+ this._ended = this._ending = true;
102
+ this._currentRequest.end(null, null, callback);
103
+ }
104
+ else {
105
+ var self = this;
106
+ var currentRequest = this._currentRequest;
107
+ this.write(data, encoding, function () {
108
+ self._ended = true;
109
+ currentRequest.end(null, null, callback);
110
+ });
111
+ this._ending = true;
112
+ }
113
+ };
114
+
115
+ // Sets a header value on the current native request
116
+ RedirectableRequest.prototype.setHeader = function (name, value) {
117
+ this._options.headers[name] = value;
118
+ this._currentRequest.setHeader(name, value);
119
+ };
120
+
121
+ // Clears a header value on the current native request
122
+ RedirectableRequest.prototype.removeHeader = function (name) {
123
+ delete this._options.headers[name];
124
+ this._currentRequest.removeHeader(name);
125
+ };
126
+
127
+ // Global timeout for all underlying requests
128
+ RedirectableRequest.prototype.setTimeout = function (msecs, callback) {
129
+ if (callback) {
130
+ this.once("timeout", callback);
131
+ }
132
+
133
+ if (this.socket) {
134
+ startTimer(this, msecs);
135
+ }
136
+ else {
137
+ var self = this;
138
+ this._currentRequest.once("socket", function () {
139
+ startTimer(self, msecs);
140
+ });
141
+ }
142
+
143
+ this.once("response", clearTimer);
144
+ this.once("error", clearTimer);
145
+
146
+ return this;
147
+ };
148
+
149
+ function startTimer(request, msecs) {
150
+ clearTimeout(request._timeout);
151
+ request._timeout = setTimeout(function () {
152
+ request.emit("timeout");
153
+ }, msecs);
154
+ }
155
+
156
+ function clearTimer() {
157
+ clearTimeout(this._timeout);
158
+ }
159
+
160
+ // Proxy all other public ClientRequest methods
161
+ [
162
+ "abort", "flushHeaders", "getHeader",
163
+ "setNoDelay", "setSocketKeepAlive",
164
+ ].forEach(function (method) {
165
+ RedirectableRequest.prototype[method] = function (a, b) {
166
+ return this._currentRequest[method](a, b);
167
+ };
168
+ });
169
+
170
+ // Proxy all public ClientRequest properties
171
+ ["aborted", "connection", "socket"].forEach(function (property) {
172
+ Object.defineProperty(RedirectableRequest.prototype, property, {
173
+ get: function () { return this._currentRequest[property]; },
174
+ });
175
+ });
176
+
177
+ RedirectableRequest.prototype._sanitizeOptions = function (options) {
178
+ // Ensure headers are always present
179
+ if (!options.headers) {
180
+ options.headers = {};
181
+ }
182
+
183
+ // Since http.request treats host as an alias of hostname,
184
+ // but the url module interprets host as hostname plus port,
185
+ // eliminate the host property to avoid confusion.
186
+ if (options.host) {
187
+ // Use hostname if set, because it has precedence
188
+ if (!options.hostname) {
189
+ options.hostname = options.host;
190
+ }
191
+ delete options.host;
192
+ }
193
+
194
+ // Complete the URL object when necessary
195
+ if (!options.pathname && options.path) {
196
+ var searchPos = options.path.indexOf("?");
197
+ if (searchPos < 0) {
198
+ options.pathname = options.path;
199
+ }
200
+ else {
201
+ options.pathname = options.path.substring(0, searchPos);
202
+ options.search = options.path.substring(searchPos);
203
+ }
204
+ }
205
+ };
206
+
207
+
208
+ // Executes the next native request (initial or redirect)
209
+ RedirectableRequest.prototype._performRequest = function () {
210
+ // Load the native protocol
211
+ var protocol = this._options.protocol;
212
+ var nativeProtocol = this._options.nativeProtocols[protocol];
213
+ if (!nativeProtocol) {
214
+ this.emit("error", new Error("Unsupported protocol " + protocol));
215
+ return;
216
+ }
217
+
218
+ // If specified, use the agent corresponding to the protocol
219
+ // (HTTP and HTTPS use different types of agents)
220
+ if (this._options.agents) {
221
+ var scheme = protocol.substr(0, protocol.length - 1);
222
+ this._options.agent = this._options.agents[scheme];
223
+ }
224
+
225
+ // Create the native request
226
+ var request = this._currentRequest =
227
+ nativeProtocol.request(this._options, this._onNativeResponse);
228
+ this._currentUrl = url.format(this._options);
229
+
230
+ // Set up event handlers
231
+ request._redirectable = this;
232
+ for (var event in eventHandlers) {
233
+ /* istanbul ignore else */
234
+ if (event) {
235
+ request.on(event, eventHandlers[event]);
236
+ }
237
+ }
238
+
239
+ // End a redirected request
240
+ // (The first request must be ended explicitly with RedirectableRequest#end)
241
+ if (this._isRedirect) {
242
+ // Write the request entity and end.
243
+ var i = 0;
244
+ var self = this;
245
+ var buffers = this._requestBodyBuffers;
246
+ (function writeNext(error) {
247
+ // Only write if this request has not been redirected yet
248
+ /* istanbul ignore else */
249
+ if (request === self._currentRequest) {
250
+ // Report any write errors
251
+ /* istanbul ignore if */
252
+ if (error) {
253
+ self.emit("error", error);
254
+ }
255
+ // Write the next buffer if there are still left
256
+ else if (i < buffers.length) {
257
+ var buffer = buffers[i++];
258
+ /* istanbul ignore else */
259
+ if (!request.finished) {
260
+ request.write(buffer.data, buffer.encoding, writeNext);
261
+ }
262
+ }
263
+ // End the request if `end` has been called on us
264
+ else if (self._ended) {
265
+ request.end();
266
+ }
267
+ }
268
+ }());
269
+ }
270
+ };
271
+
272
+ // Processes a response from the current native request
273
+ RedirectableRequest.prototype._processResponse = function (response) {
274
+ // Store the redirected response
275
+ var statusCode = response.statusCode;
276
+ if (this._options.trackRedirects) {
277
+ this._redirects.push({
278
+ url: this._currentUrl,
279
+ headers: response.headers,
280
+ statusCode: statusCode,
281
+ });
282
+ }
283
+
284
+ // RFC7231§6.4: The 3xx (Redirection) class of status code indicates
285
+ // that further action needs to be taken by the user agent in order to
286
+ // fulfill the request. If a Location header field is provided,
287
+ // the user agent MAY automatically redirect its request to the URI
288
+ // referenced by the Location field value,
289
+ // even if the specific status code is not understood.
290
+ var location = response.headers.location;
291
+ if (location && this._options.followRedirects !== false &&
292
+ statusCode >= 300 && statusCode < 400) {
293
+ // Abort the current request
294
+ this._currentRequest.removeAllListeners();
295
+ this._currentRequest.on("error", noop);
296
+ this._currentRequest.abort();
297
+ // Discard the remainder of the response to avoid waiting for data
298
+ response.destroy();
299
+
300
+ // RFC7231§6.4: A client SHOULD detect and intervene
301
+ // in cyclical redirections (i.e., "infinite" redirection loops).
302
+ if (++this._redirectCount > this._options.maxRedirects) {
303
+ this.emit("error", new Error("Max redirects exceeded."));
304
+ return;
305
+ }
306
+
307
+ // RFC7231§6.4: Automatic redirection needs to done with
308
+ // care for methods not known to be safe […],
309
+ // since the user might not wish to redirect an unsafe request.
310
+ // RFC7231§6.4.7: The 307 (Temporary Redirect) status code indicates
311
+ // that the target resource resides temporarily under a different URI
312
+ // and the user agent MUST NOT change the request method
313
+ // if it performs an automatic redirection to that URI.
314
+ var header;
315
+ var headers = this._options.headers;
316
+ if (statusCode !== 307 && !(this._options.method in SAFE_METHODS)) {
317
+ this._options.method = "GET";
318
+ // Drop a possible entity and headers related to it
319
+ this._requestBodyBuffers = [];
320
+ for (header in headers) {
321
+ if (/^content-/i.test(header)) {
322
+ delete headers[header];
323
+ }
324
+ }
325
+ }
326
+
327
+ // Drop the Host header, as the redirect might lead to a different host
328
+ if (!this._isRedirect) {
329
+ for (header in headers) {
330
+ if (/^host$/i.test(header)) {
331
+ delete headers[header];
332
+ }
333
+ }
334
+ }
335
+
336
+ // Perform the redirected request
337
+ var redirectUrl = url.resolve(this._currentUrl, location);
338
+ debug("redirecting to", redirectUrl);
339
+ Object.assign(this._options, url.parse(redirectUrl));
340
+ if (typeof this._options.beforeRedirect === "function") {
341
+ try {
342
+ this._options.beforeRedirect.call(null, this._options);
343
+ }
344
+ catch (err) {
345
+ this.emit("error", err);
346
+ return;
347
+ }
348
+ this._sanitizeOptions(this._options);
349
+ }
350
+ this._isRedirect = true;
351
+ this._performRequest();
352
+ }
353
+ else {
354
+ // The response is not a redirect; return it as-is
355
+ response.responseUrl = this._currentUrl;
356
+ response.redirects = this._redirects;
357
+ this.emit("response", response);
358
+
359
+ // Clean up
360
+ this._requestBodyBuffers = [];
361
+ }
362
+ };
363
+
364
+ // Wraps the key/value object of protocols with redirect functionality
365
+ function wrap(protocols) {
366
+ // Default settings
367
+ var exports = {
368
+ maxRedirects: 21,
369
+ maxBodyLength: 10 * 1024 * 1024,
370
+ };
371
+
372
+ // Wrap each protocol
373
+ var nativeProtocols = {};
374
+ Object.keys(protocols).forEach(function (scheme) {
375
+ var protocol = scheme + ":";
376
+ var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
377
+ var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);
378
+
379
+ // Executes a request, following redirects
380
+ wrappedProtocol.request = function (input, options, callback) {
381
+ // Parse parameters
382
+ if (typeof input === "string") {
383
+ var urlStr = input;
384
+ try {
385
+ input = urlToOptions(new URL(urlStr));
386
+ }
387
+ catch (err) {
388
+ /* istanbul ignore next */
389
+ input = url.parse(urlStr);
390
+ }
391
+ }
392
+ else if (URL && (input instanceof URL)) {
393
+ input = urlToOptions(input);
394
+ }
395
+ else {
396
+ callback = options;
397
+ options = input;
398
+ input = { protocol: protocol };
399
+ }
400
+ if (typeof options === "function") {
401
+ callback = options;
402
+ options = null;
403
+ }
404
+
405
+ // Set defaults
406
+ options = Object.assign({
407
+ maxRedirects: exports.maxRedirects,
408
+ maxBodyLength: exports.maxBodyLength,
409
+ }, input, options);
410
+ options.nativeProtocols = nativeProtocols;
411
+
412
+ assert.equal(options.protocol, protocol, "protocol mismatch");
413
+ debug("options", options);
414
+ return new RedirectableRequest(options, callback);
415
+ };
416
+
417
+ // Executes a GET request, following redirects
418
+ wrappedProtocol.get = function (input, options, callback) {
419
+ var request = wrappedProtocol.request(input, options, callback);
420
+ request.end();
421
+ return request;
422
+ };
423
+ });
424
+ return exports;
425
+ }
426
+
427
+ /* istanbul ignore next */
428
+ function noop() { /* empty */ }
429
+
430
+ // from https://github.com/nodejs/node/blob/master/lib/internal/url.js
431
+ function urlToOptions(urlObject) {
432
+ var options = {
433
+ protocol: urlObject.protocol,
434
+ hostname: urlObject.hostname.startsWith("[") ?
435
+ /* istanbul ignore next */
436
+ urlObject.hostname.slice(1, -1) :
437
+ urlObject.hostname,
438
+ hash: urlObject.hash,
439
+ search: urlObject.search,
440
+ pathname: urlObject.pathname,
441
+ path: urlObject.pathname + urlObject.search,
442
+ href: urlObject.href,
443
+ };
444
+ if (urlObject.port !== "") {
445
+ options.port = Number(urlObject.port);
446
+ }
447
+ return options;
448
+ }
449
+
450
+ // Exports
451
+ module.exports = wrap({ http: http, https: https });
452
+ module.exports.wrap = wrap;
@@ -0,0 +1,87 @@
1
+ {
2
+ "_from": "follow-redirects@^1.0.0",
3
+ "_id": "follow-redirects@1.9.0",
4
+ "_inBundle": false,
5
+ "_integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==",
6
+ "_location": "/follow-redirects",
7
+ "_phantomChildren": {},
8
+ "_requested": {
9
+ "type": "range",
10
+ "registry": true,
11
+ "raw": "follow-redirects@^1.0.0",
12
+ "name": "follow-redirects",
13
+ "escapedName": "follow-redirects",
14
+ "rawSpec": "^1.0.0",
15
+ "saveSpec": null,
16
+ "fetchSpec": "^1.0.0"
17
+ },
18
+ "_requiredBy": [
19
+ "/http-proxy"
20
+ ],
21
+ "_resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
22
+ "_shasum": "8d5bcdc65b7108fe1508649c79c12d732dcedb4f",
23
+ "_spec": "follow-redirects@^1.0.0",
24
+ "_where": "/root/proxy/node_modules/http-proxy",
25
+ "author": {
26
+ "name": "Ruben Verborgh",
27
+ "email": "ruben@verborgh.org",
28
+ "url": "https://ruben.verborgh.org/"
29
+ },
30
+ "bugs": {
31
+ "url": "https://github.com/follow-redirects/follow-redirects/issues"
32
+ },
33
+ "bundleDependencies": false,
34
+ "contributors": [
35
+ {
36
+ "name": "Olivier Lalonde",
37
+ "email": "olalonde@gmail.com",
38
+ "url": "http://www.syskall.com"
39
+ },
40
+ {
41
+ "name": "James Talmage",
42
+ "email": "james@talmage.io"
43
+ }
44
+ ],
45
+ "dependencies": {
46
+ "debug": "^3.0.0"
47
+ },
48
+ "deprecated": false,
49
+ "description": "HTTP and HTTPS modules that follow redirects.",
50
+ "devDependencies": {
51
+ "concat-stream": "^2.0.0",
52
+ "eslint": "^5.16.0",
53
+ "express": "^4.16.4",
54
+ "lolex": "^3.1.0",
55
+ "mocha": "^6.0.2",
56
+ "nyc": "^14.1.1"
57
+ },
58
+ "engines": {
59
+ "node": ">=4.0"
60
+ },
61
+ "files": [
62
+ "*.js"
63
+ ],
64
+ "homepage": "https://github.com/follow-redirects/follow-redirects",
65
+ "keywords": [
66
+ "http",
67
+ "https",
68
+ "url",
69
+ "redirect",
70
+ "client",
71
+ "location",
72
+ "utility"
73
+ ],
74
+ "license": "MIT",
75
+ "main": "index.js",
76
+ "name": "follow-redirects",
77
+ "repository": {
78
+ "type": "git",
79
+ "url": "git+ssh://git@github.com/follow-redirects/follow-redirects.git"
80
+ },
81
+ "scripts": {
82
+ "lint": "eslint *.js test",
83
+ "mocha": "nyc mocha",
84
+ "test": "npm run lint && npm run mocha"
85
+ },
86
+ "version": "1.9.0"
87
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "output": "CHANGELOG.md",
3
+ "template": "keepachangelog",
4
+ "unreleased": true,
5
+ "commitLimit": false
6
+ }
@@ -0,0 +1 @@
1
+ package-lock.json binary