# pac-resolver

> Generates an asynchronous resolver function from a PAC file

Latest version **9.0.1** (published 2026-04-06) · MIT license · 0 weekly downloads

## Install

```sh
npm install pac-resolver
pnpm add pac-resolver
yarn add pac-resolver
bun add pac-resolver
```

## Health

**Score 60/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; has provenance; high maintenance score.

Warnings: low downloads; no types.

## Facts

| | |
|---|---|
| Version | 9.0.1 |
| Published | 2026-04-06 |
| First published | 2013-12-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM |
| Node | >= 20 |
| Dependencies | 2 |
| Unpacked size | 55 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 1164 |
| Author | Nathan Rajlich |
| Maintainers | tootallnate |
| Keywords | pac, file, proxy, resolve, dns |

## Links

- npm: https://www.npmjs.com/package/pac-resolver
- Repository: https://github.com/TooTallNate/proxy-agents
- Homepage: https://github.com/TooTallNate/proxy-agents#readme
- Issues: https://github.com/TooTallNate/proxy-agents/issues
- npm.io page: https://npm.io/package/pac-resolver

## Dependencies (2)

- [netmask](https://npm.io/package/netmask.md) ^2.0.2
- [degenerator](https://npm.io/package/degenerator.md) 7.0.1

## Alternatives

- [unionfs](https://npm.io/package/unionfs.md) — 2.2M weekly downloads
- [path-starts-with](https://npm.io/package/path-starts-with.md) — 35.9K weekly downloads
- [redzip](https://npm.io/package/redzip.md) — 1.2K weekly downloads
- [vscode-anymatch](https://npm.io/package/vscode-anymatch.md) — 848 weekly downloads
- [@ledgerhq/coin-filecoin](https://npm.io/package/@ledgerhq/coin-filecoin.md) — 793 weekly downloads

## Recent versions

- 9.0.1 (latest) — 2026-04-06
- 9.0.0 — 2026-04-01
- 8.0.0 — 2026-03-11
- 7.0.1 — 2024-02-12
- 7.0.0 — 2023-07-18
- 6.0.2 — 2023-06-29
- 6.0.1 — 2023-05-05
- 6.0.0 — 2023-05-04
- 5.0.1 — 2022-05-25
- 5.0.0 — 2021-07-12
- 4.2.0 — 2021-03-31
- 4.1.1 — 2021-03-31
- 4.1.0 — 2020-02-08
- 4.0.0 — 2020-02-05
- 3.0.0 — 2017-06-13
- … 13 more at https://npm.io/package/pac-resolver/versions

## README

pac-resolver
============
### Generates an asynchronous resolver function from a [PAC file][pac-wikipedia]


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.

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:

```ts
import { readFileSync } from 'fs';
import { createPacResolver } from 'pac-resolver';

const FindProxyForURL = createPacResolver(readFileSync('proxy.pac'));

const res = await FindProxyForURL('http://foo.com/');
console.log(res);
// "DIRECT"
```


API
---

### pac(qjs: QuickJSWASMModule, pacFileContents: string | Buffer, options?: PacResolverOptions) → 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.

 The `qjs` parameter is a QuickJS module instance as returned from `getQuickJS()` from the `quickjs-emscripten` module.

[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

---
_Source: https://npm.io/package/pac-resolver · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
