https://github.com/ahungrynoob/https-pool
A pool of https server for domains.
https://github.com/ahungrynoob/https-pool
cache certificate https node proxy
Last synced: 3 months ago
JSON representation
A pool of https server for domains.
- Host: GitHub
- URL: https://github.com/ahungrynoob/https-pool
- Owner: ahungrynoob
- License: mit
- Created: 2019-10-05T20:32:39.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-09-17T06:27:55.000Z (over 5 years ago)
- Last Synced: 2025-02-21T00:05:00.732Z (11 months ago)
- Topics: cache, certificate, https, node, proxy
- Language: JavaScript
- Size: 64.5 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# https-pool
A cached pool of https server for domains.
---
[](https://npmjs.org/package/https-pool)
[](https://travis-ci.org/ahungrynoob/https-pool)
[](http://codecov.io/github/ahungrynoob/https-pool?branch=master)
[](https://npmjs.org/package/https-pool)
## Install
```bash
$ npm i https-pool --save
```
## Usage
> https-pool is useful for getting https server without worry about forging certificates.
Just pass your CA certificate options into HttpsPool, and get a empty https server pool.
```javascript
const HttpsPool = require("https-pool");
const fs = require("fs");
const httpsPool = new HttpsPool({
commonName: "example",
countryName: "CN",
ST: "SH",
localityName: "SH",
organizationName: "example.com",
OU: "example.com"
});
// You can save the cert and key of root CA to let the client trust it.
const { key, cert } = httpsPool.CA;
```
Or create a empty https server pool with specific key and cert:
```javascript
const HttpsPool = require("https-pool");
const fs = require("fs");
const key = fs.readFileSync(path.join(fixtures, "root.key"));
const cert = fs.readFileSync(path.join(fixtures, "root.crt"));
const httpsPool = new HttpsPool({
key,
cert
});
```
You can get a https server like this ↓. That's enough for common usage. `https-pool` will take care of the cache logic, so worrying about your memory is unnecessary.
```javascript
httpsPool.getServer(
"www.foo.com",
(req, res) => {
// the listener for server.request event
console.log(req.headers);
res.send("ok");
},
_port => {
// callback with a random available port
console.log(typeof _port === "number");
},
// timeout for the new https-server
3000
);
```
## API
### Properties
- `httpsPool.CA` - return as {key, cert} in the format as pem. (You could trust the key and cert on the your client such as browser)
### HttpsPool(options)
It will create a https pool.
- options
- `option.timeout` - https server won't close until secure conntection is established within timeout (default 6000)
- `option.max_servers` - max num for https servers the pool cached (default 220)
- `option.key` and `option.cert`- the private key and cert of the root ca which your client trusts or https-pool will create one
- If you don't pass `option.key` and `option.cert`, you need to pass these options:
- `option.commonName` - the common name option
- `option.countryName` - the country name option
- `option.ST` - the ST option
- `option.localityName` - the locality name option
- `option.organizationName` - the organization name option
- `option.OU` - the OU option
### HttpsPool#getServer(hostname, listener, callback, timeout)
It will return a https server if available or will create one and cached.
- `hostname` - hostname which https server base on
- `listener` {`Function` | `Object`} - request event listener or Object type with custom event listener
- `callback` - callback func with port arg
- `timeout` - timeout for https server in ms
### HttpsPool#existsServer(hostname)
Tell whether the server basing on the hostname exists
- `hostname` - the hostname server base on
- `return {boolean}`
### HttpsPool#removeServer(hostname)
Remove the server in the cache
- `hostname` - the hostname server base on
### HttpsPool#free()
Free the https server who has no connections when count > max
### HttpsPool#clear()
Clear the https pool forcily
## LICENSE
Licensed under the MIT license.