All free skills / Other majors
pac-proxy-agent 9.x
Use pac-proxy-agent@^9.0.0 as an ESM Node.js HTTP Agent backed by a PAC file or PAC URI.
- For
pac-proxy-agent@9.1.0- Verified
- 2026-09-08, 2 examples executed
- Skill package
@modootoday/pmcp-pac-proxy-agent@9.0.0
Use this skill for free
No PMCP login or subscription is required. Download the original instructions, or install the content-only archive with your project's package manager.
Download SKILL.md · Download package archive
npm install --save-dev https://pmcp.build/skills/pac-proxy-agent/9/package.tgz
PMCP discovers the installed package's instructions. Connect your runtime after installation.
Archive integrity
sha512-vvZsQdoVzZjAj4/V/Ye9mLK6z0Ghad3PWLPRaFFHwjlm67ASyLNhWIzLOaPmmIh12DLm5FX84B66vGfGUGLIog==Complete instructions
Verified against pac-proxy-agent@9.1.0 on 2026-09-08. 2 of 2 examples executed.
pac-proxy-agent
Scope and runtime
pac-proxy-agent provides an http.Agent for Node's built-in http and https modules. It retrieves a PAC file, evaluates it, and selects an HTTP, HTTPS, SOCKS, or direct connection for each request.
The 9.x line requires Node.js 20 or newer and is ESM-only. Import PacProxyAgent by name; do not use the CommonJS require() shape shown in older examples.
Constructor
new PacProxyAgent(uri: string | URL, options?)
The PAC source protocols exposed by the package are:
pac+data:pac+file:pac+ftp:pac+http:pac+https:
The underlying URI is loaded after removing the pac+ prefix. The constructor also accepts the corresponding underlying URI protocols according to the package source.
Options combine Node http.Agent options with PAC resolver, URI-loading, HTTP proxy, HTTPS proxy, and SOCKS proxy options. The package-specific option is:
fallbackToDirect?: boolean
Pass the resulting agent to Node's built-in HTTP APIs with { agent }:
import * as http from 'http';
import { PacProxyAgent } from 'pac-proxy-agent';
const agent = new PacProxyAgent('pac+https://example.invalid/proxy.pac');
http.get('http://example.invalid/', { agent }, (res) => {
res.resume();
});
A request is needed for connection selection and proxy-agent creation. The package is not itself a request client.
Resolving a PAC file without making a request
getResolver() loads the PAC source lazily and returns the callable FindProxyForURL resolver. Calling it directly is useful when code needs to inspect the PAC decision without issuing an HTTP request.
This standalone example uses a data: PAC source, so it needs no network or filesystem access:
import assert from 'node:assert/strict';
import { PacProxyAgent } from 'pac-proxy-agent';
const pac = `
function FindProxyForURL(url, host) {
if (host === 'internal.example') return 'DIRECT';
return 'PROXY proxy.example:8080';
}
`;
const agent = new PacProxyAgent(
`pac+data:text/plain,${encodeURIComponent(pac)}`
);
const resolver = await agent.getResolver();
assert.equal(await resolver('http://internal.example/', 'internal.example'), 'DIRECT');
assert.equal(
await resolver('http://external.example/', 'external.example'),
'PROXY proxy.example:8080'
);
The resolver is loaded and cached lazily. Reusing the agent allows the implementation to reuse the existing resolver when the PAC content has not changed.
Static protocol list
The class exposes the PAC protocols it handles through PacProxyAgent.protocols:
import assert from 'node:assert/strict';
import { PacProxyAgent } from 'pac-proxy-agent';
assert.deepEqual(PacProxyAgent.protocols, [
'pac+data',
'pac+file',
'pac+ftp',
'pac+http',
'pac+https',
]);
Common mistakes
- Do not copy pre-8.x CommonJS examples. Version 9 is ESM and requires Node.js 20 or newer.
- Do not instantiate the agent with an ordinary PAC URL while forgetting the PAC scheme expected by the package. PAC sources are represented with schemes such as
pac+http:,pac+https:, orpac+data:. - Do not expect
PacProxyAgentto execute a PAC decision merely by constructing it. PAC loading is lazy; callgetResolver()or use the agent in a Node HTTP request. - Do not use
describe,it,expect, or runner-provided globals in a direct script. The agent integrates with Node'shttpandhttpsAPIs rather than providing a test-runner interface. - Do not assume an agent is a standalone request client. Requests must be made through Node's built-in HTTP APIs with the agent supplied in the request options.
- Do not rely on older 7.x implementation details involving CommonJS imports or the older QuickJS runtime. The 8.x and 9.x lines changed those internals; 9.x uses the package's ESM setup and requires Node 20 or newer.
What this skill does not cover
This skill does not cover the behavior of the underlying get-uri, PAC resolver, QuickJS runtime, HTTP proxy agent, HTTPS proxy agent, or SOCKS proxy agent packages individually. It does not cover PAC-file authoring beyond the resolver examples, proxy authentication, detailed option behavior, error handling, or running real HTTP/HTTPS requests through a network or filesystem-backed PAC source. Those behaviors require the package's own runtime dependencies and an actual Node HTTP request environment.