mirror of
				https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
				synced 2024-07-29 21:57:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //Based on follow-redirects v0.0.x
 | |
| 
 | |
| var nativeHttps = require('https'),
 | |
|   nativeHttp = require('http'),
 | |
|   url = require('url'),
 | |
|   util = require('./util');
 | |
| 
 | |
| var maxRedirects = module.exports.maxRedirects = 5;
 | |
| 
 | |
| var protocols = {
 | |
|   https: nativeHttps,
 | |
|   http: nativeHttp
 | |
| };
 | |
| 
 | |
| for (var protocol in protocols) {
 | |
|   var h = function() {};
 | |
|   h.prototype = protocols[protocol];
 | |
|   h = new h();
 | |
| 
 | |
|   h.request = function(h) {
 | |
|     return function(options, callback, redirectOptions) {
 | |
| 
 | |
|       redirectOptions = redirectOptions || {};
 | |
| 
 | |
|       var max = (typeof options === 'object' && 'maxRedirects' in options) ? options.maxRedirects : exports.maxRedirects;
 | |
| 
 | |
|       var redirect = util.extend({
 | |
|         count: 0,
 | |
|         max: max,
 | |
|         clientRequest: null,
 | |
|         userCallback: callback
 | |
|       }, redirectOptions);
 | |
| 
 | |
|       if (redirect.count > redirect.max) {
 | |
|         var err = new Error('Max redirects exceeded. To allow more redirects, pass options.maxRedirects property.');
 | |
|         redirect.clientRequest.emit('error', err);
 | |
|         return redirect.clientRequest;
 | |
|       }
 | |
| 
 | |
|       redirect.count++;
 | |
| 
 | |
|       var reqUrl;
 | |
|       if (typeof options === 'string') {
 | |
|         reqUrl = options;
 | |
|       } else {
 | |
|         reqUrl = url.format(util.extend({
 | |
|           protocol: protocol
 | |
|         }, options));
 | |
|       }
 | |
| 
 | |
|       var clientRequest = Object.getPrototypeOf(h).request(options, redirectCallback(reqUrl, redirect));
 | |
| 
 | |
|       if (!redirect.clientRequest) redirect.clientRequest = clientRequest;
 | |
| 
 | |
|       function redirectCallback(reqUrl, redirect) {
 | |
|         return function(res) {
 | |
|           if (res.statusCode < 300 || res.statusCode > 399) {
 | |
|             return redirect.userCallback(res);
 | |
|           }
 | |
| 
 | |
|           if (!('location' in res.headers)) {
 | |
|             return redirect.userCallback(res);
 | |
|           }
 | |
| 
 | |
|           var redirectUrl = url.resolve(reqUrl, res.headers.location);
 | |
| 
 | |
|           var proto = url.parse(redirectUrl).protocol;
 | |
|           proto = proto.substr(0, proto.length - 1);
 | |
|           return module.exports[proto].get(redirectUrl, redirectCallback(reqUrl, redirect), redirect);
 | |
|         };
 | |
|       }
 | |
| 
 | |
|       return clientRequest;
 | |
|     };
 | |
|   }(h);
 | |
| 
 | |
|   // see https://github.com/joyent/node/blob/master/lib/http.js#L1623
 | |
|   h.get = function(h) {
 | |
|     return function(options, cb, redirectOptions) {
 | |
|       var req = h.request(options, cb, redirectOptions);
 | |
|       req.end();
 | |
|       return req;
 | |
|     };
 | |
|   }(h);
 | |
| 
 | |
|   module.exports[protocol] = h;
 | |
| }
 | 
