You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					98 lines
				
				3.1 KiB
			
		
		
			
		
	
	
					98 lines
				
				3.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								pac-resolver
							 | 
						||
| 
								 | 
							
								============
							 | 
						||
| 
								 | 
							
								### Generates an asynchronous resolver function from a [PAC file][pac-wikipedia]
							 | 
						||
| 
								 | 
							
								[](https://github.com/TooTallNate/node-pac-resolver/actions?workflow=Node+CI)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This module accepts a JavaScript String of code, which is meant to be a
							 | 
						||
| 
								 | 
							
								[PAC proxy file][pac-wikipedia], and returns a generated asynchronous
							 | 
						||
| 
								 | 
							
								`FindProxyForURL()` function.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Installation
							 | 
						||
| 
								 | 
							
								------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Install with `npm`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								$ npm install pac-resolver
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Example
							 | 
						||
| 
								 | 
							
								-------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Given the PAC proxy file named `proxy.pac`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								function FindProxyForURL(url, host) {
							 | 
						||
| 
								 | 
							
								  if (isInNet(myIpAddress(), "10.1.10.0", "255.255.255.0")) {
							 | 
						||
| 
								 | 
							
								    return "PROXY 1.2.3.4:8080";
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    return "DIRECT";
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can consume this PAC file with `pac-resolver` like so:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var fs = require('fs');
							 | 
						||
| 
								 | 
							
								var pac = require('pac-resolver');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var FindProxyForURL = pac(fs.readFileSync('proxy.pac'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								FindProxyForURL('http://foo.com/').then((res) => {
							 | 
						||
| 
								 | 
							
								  console.log(res);
							 | 
						||
| 
								 | 
							
								  // "DIRECT"
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								API
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### pac(String pacFileContents[, Object options]) → Function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns an asynchronous `FindProxyForURL()` function based off of the given JS
							 | 
						||
| 
								 | 
							
								string `pacFileContents` PAC proxy file. An optional `options` object may be
							 | 
						||
| 
								 | 
							
								passed in which respects the following options:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 * `filename` - String - the filename to use in error stack traces. Defaults to `proxy.pac`.
							 | 
						||
| 
								 | 
							
								 * `sandbox` - Object - a map of functions to include in the sandbox of the
							 | 
						||
| 
								 | 
							
								 JavaScript environment where the JS code will be executed. i.e. if you wanted to
							 | 
						||
| 
								 | 
							
								 include the common `alert` function you could pass `alert: console.log`. For
							 | 
						||
| 
								 | 
							
								 async functions, you must set the `async = true` property on the function
							 | 
						||
| 
								 | 
							
								 instance, and the JS code will be able to invoke the function as if it were
							 | 
						||
| 
								 | 
							
								 synchronous.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								License
							 | 
						||
| 
								 | 
							
								-------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(The MIT License)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Permission is hereby granted, free of charge, to any person obtaining
							 | 
						||
| 
								 | 
							
								a copy of this software and associated documentation files (the
							 | 
						||
| 
								 | 
							
								'Software'), to deal in the Software without restriction, including
							 | 
						||
| 
								 | 
							
								without limitation the rights to use, copy, modify, merge, publish,
							 | 
						||
| 
								 | 
							
								distribute, sublicense, and/or sell copies of the Software, and to
							 | 
						||
| 
								 | 
							
								permit persons to whom the Software is furnished to do so, subject to
							 | 
						||
| 
								 | 
							
								the following conditions:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The above copyright notice and this permission notice shall be
							 | 
						||
| 
								 | 
							
								included in all copies or substantial portions of the Software.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
							 | 
						||
| 
								 | 
							
								EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
							 | 
						||
| 
								 | 
							
								MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
							 | 
						||
| 
								 | 
							
								IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
							 | 
						||
| 
								 | 
							
								CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
							 | 
						||
| 
								 | 
							
								TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
							 | 
						||
| 
								 | 
							
								SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[pac-file-docs]: https://web.archive.org/web/20070602031929/http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
							 | 
						||
| 
								 | 
							
								[pac-wikipedia]: http://wikipedia.org/wiki/Proxy_auto-config
							 |