agent-base
Advanced tools
Comparing version 6.0.2 to 7.0.0
{ | ||
"name": "agent-base", | ||
"version": "6.0.2", | ||
"version": "7.0.0", | ||
"description": "Turn a function into an `http.Agent` instance", | ||
"main": "dist/src/index", | ||
"typings": "dist/src/index", | ||
"main": "./dist/index.js", | ||
"types": "./dist/index.d.ts", | ||
"files": [ | ||
"dist/src", | ||
"src" | ||
"dist" | ||
], | ||
"scripts": { | ||
"prebuild": "rimraf dist", | ||
"build": "tsc", | ||
"postbuild": "cpy --parents src test '!**/*.ts' dist", | ||
"test": "mocha --reporter spec dist/test/*.js", | ||
"test-lint": "eslint src --ext .js,.ts", | ||
"prepublishOnly": "npm run build" | ||
"test": "jest --env node --verbose --bail", | ||
"lint": "eslint . --ext .ts", | ||
"pack": "node ../../scripts/pack.mjs" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/TooTallNate/node-agent-base.git" | ||
"url": "https://github.com/TooTallNate/proxy-agents.git", | ||
"directory": "packages/agent-base" | ||
}, | ||
@@ -32,34 +30,21 @@ "keywords": [ | ||
"license": "MIT", | ||
"bugs": { | ||
"url": "https://github.com/TooTallNate/node-agent-base/issues" | ||
}, | ||
"dependencies": { | ||
"debug": "4" | ||
"debug": "^4.3.4" | ||
}, | ||
"devDependencies": { | ||
"@types/debug": "4", | ||
"@types/mocha": "^5.2.7", | ||
"@types/node": "^14.0.20", | ||
"@types/semver": "^7.1.0", | ||
"@types/ws": "^6.0.3", | ||
"@typescript-eslint/eslint-plugin": "1.6.0", | ||
"@typescript-eslint/parser": "1.1.0", | ||
"async-listen": "^1.2.0", | ||
"cpy-cli": "^2.0.0", | ||
"eslint": "5.16.0", | ||
"eslint-config-airbnb": "17.1.0", | ||
"eslint-config-prettier": "4.1.0", | ||
"eslint-import-resolver-typescript": "1.1.1", | ||
"eslint-plugin-import": "2.16.0", | ||
"eslint-plugin-jsx-a11y": "6.2.1", | ||
"eslint-plugin-react": "7.12.4", | ||
"mocha": "^6.2.0", | ||
"rimraf": "^3.0.0", | ||
"semver": "^7.1.2", | ||
"typescript": "^3.5.3", | ||
"ws": "^3.0.0" | ||
"@types/debug": "^4.1.7", | ||
"@types/jest": "^29.5.1", | ||
"@types/node": "^14.18.43", | ||
"@types/semver": "^7.3.13", | ||
"@types/ws": "^6.0.4", | ||
"async-listen": "^2.1.0", | ||
"jest": "^29.5.0", | ||
"ts-jest": "^29.1.0", | ||
"tsconfig": "workspace:*", | ||
"typescript": "^5.0.4", | ||
"ws": "^3.3.3" | ||
}, | ||
"engines": { | ||
"node": ">= 6.0.0" | ||
"node": ">= 14" | ||
} | ||
} |
122
README.md
agent-base | ||
========== | ||
### Turn a function into an [`http.Agent`][http.Agent] instance | ||
[![Build Status](https://github.com/TooTallNate/node-agent-base/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-agent-base/actions?workflow=Node+CI) | ||
This module provides an `http.Agent` generator. That is, you pass it an async | ||
callback function, and it returns a new `http.Agent` instance that will invoke the | ||
given callback function when sending outbound HTTP requests. | ||
This module is a thin wrapper around the base `http.Agent` class. | ||
It provides an absract class that must define a `connect()` function, | ||
which is responsible for creating the underlying socket that the HTTP | ||
client requests will use. | ||
The `connect()` function may return an arbitrary `Duplex` stream, or | ||
another `http.Agent` instance to delegate the request to, and may be | ||
asynchronous (by defining an `async` function). | ||
Instances of this agent can be used with the `http` and `https` | ||
modules. To differentiate, the options parameter in the `connect()` | ||
function includes a `secureEndpoint` property, which can be checked | ||
to determine what type of socket should be returned. | ||
#### Some subclasses: | ||
@@ -20,43 +30,32 @@ | ||
Installation | ||
------------ | ||
Install with `npm`: | ||
``` bash | ||
$ npm install agent-base | ||
``` | ||
Example | ||
------- | ||
Here's a minimal example that creates a new `net.Socket` connection to the server | ||
for every HTTP request (i.e. the equivalent of `agent: false` option): | ||
Here's a minimal example that creates a new `net.Socket` or `tls.Socket` | ||
based on the `secureEndpoint` property. This agent can be used with both | ||
the `http` and `https` modules. | ||
```js | ||
var net = require('net'); | ||
var tls = require('tls'); | ||
var url = require('url'); | ||
var http = require('http'); | ||
var agent = require('agent-base'); | ||
```ts | ||
import * as net from 'net'; | ||
import * as tls from 'tls'; | ||
import * as http from 'http'; | ||
import { Agent } from 'agent-base'; | ||
var endpoint = 'http://nodejs.org/api/'; | ||
var parsed = url.parse(endpoint); | ||
// This is the important part! | ||
parsed.agent = agent(function (req, opts) { | ||
var socket; | ||
// `secureEndpoint` is true when using the https module | ||
if (opts.secureEndpoint) { | ||
socket = tls.connect(opts); | ||
} else { | ||
socket = net.connect(opts); | ||
class MyAgent extends Agent { | ||
connect(req, opts) { | ||
// `secureEndpoint` is true when using the "https" module | ||
if (opts.secureEndpoint) { | ||
return tls.connect(opts); | ||
} else { | ||
return net.connect(opts); | ||
} | ||
} | ||
return socket; | ||
}); | ||
// Everything else works just like normal... | ||
http.get(parsed, function (res) { | ||
// Keep alive enabled means that `connect()` will only be | ||
// invoked when a new connection needs to be created | ||
const agent = new MyAgent({ keepAlive: true }); | ||
// Pass the `agent` option when creating the HTTP request | ||
http.get('http://nodejs.org/api/', { agent }, (res) => { | ||
console.log('"response" event!', res.headers); | ||
@@ -67,51 +66,2 @@ res.pipe(process.stdout); | ||
Returning a Promise or using an `async` function is also supported: | ||
```js | ||
agent(async function (req, opts) { | ||
await sleep(1000); | ||
// etc… | ||
}); | ||
``` | ||
Return another `http.Agent` instance to "pass through" the responsibility | ||
for that HTTP request to that agent: | ||
```js | ||
agent(function (req, opts) { | ||
return opts.secureEndpoint ? https.globalAgent : http.globalAgent; | ||
}); | ||
``` | ||
API | ||
--- | ||
## Agent(Function callback[, Object options]) → [http.Agent][] | ||
Creates a base `http.Agent` that will execute the callback function `callback` | ||
for every HTTP request that it is used as the `agent` for. The callback function | ||
is responsible for creating a `stream.Duplex` instance of some kind that will be | ||
used as the underlying socket in the HTTP request. | ||
The `options` object accepts the following properties: | ||
* `timeout` - Number - Timeout for the `callback()` function in milliseconds. Defaults to Infinity (optional). | ||
The callback function should have the following signature: | ||
### callback(http.ClientRequest req, Object options, Function cb) → undefined | ||
The ClientRequest `req` can be accessed to read request headers and | ||
and the path, etc. The `options` object contains the options passed | ||
to the `http.request()`/`https.request()` function call, and is formatted | ||
to be directly passed to `net.connect()`/`tls.connect()`, or however | ||
else you want a Socket to be created. Pass the created socket to | ||
the callback function `cb` once created, and the HTTP request will | ||
continue to proceed. | ||
If the `https` module is used to invoke the HTTP request, then the | ||
`secureEndpoint` property on `options` _will be set to `true`_. | ||
License | ||
@@ -118,0 +68,0 @@ ------- |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 4 instances in 1 package
11
14
20244
246
96
7
Updateddebug@^4.3.4