diff --git a/README.md b/README.md
index 6452d97..c63274f 100644
--- a/README.md
+++ b/README.md
@@ -1,70 +1,63 @@
-# luminati-tunnel
+# proxies-pool
-![Last version](https://img.shields.io/github/tag/Kikobeats/luminati-tunnel.svg?style=flat-square)
-[![Build Status](https://img.shields.io/travis/Kikobeats/luminati-tunnel/master.svg?style=flat-square)](https://travis-ci.org/Kikobeats/luminati-tunnel)
-[![Coverage Status](https://img.shields.io/coveralls/Kikobeats/luminati-tunnel.svg?style=flat-square)](https://coveralls.io/github/Kikobeats/luminati-tunnel)
-[![Dependency status](https://img.shields.io/david/Kikobeats/luminati-tunnel.svg?style=flat-square)](https://david-dm.org/Kikobeats/luminati-tunnel)
-[![Dev Dependencies Status](https://img.shields.io/david/dev/Kikobeats/luminati-tunnel.svg?style=flat-square)](https://david-dm.org/Kikobeats/luminati-tunnel#info=devDependencies)
-[![NPM Status](https://img.shields.io/npm/dm/luminati-tunnel.svg?style=flat-square)](https://www.npmjs.org/package/luminati-tunnel)
+![Last version](https://img.shields.io/github/tag/Kikobeats/proxies-pool.svg?style=flat-square)
+[![Build Status](https://img.shields.io/travis/Kikobeats/proxies-pool/master.svg?style=flat-square)](https://travis-ci.org/Kikobeats/proxies-pool)
+[![Coverage Status](https://img.shields.io/coveralls/Kikobeats/proxies-pool.svg?style=flat-square)](https://coveralls.io/github/Kikobeats/proxies-pool)
+[![Dependency status](https://img.shields.io/david/Kikobeats/proxies-pool.svg?style=flat-square)](https://david-dm.org/Kikobeats/proxies-pool)
+[![Dev Dependencies Status](https://img.shields.io/david/dev/Kikobeats/proxies-pool.svg?style=flat-square)](https://david-dm.org/Kikobeats/proxies-pool#info=devDependencies)
+[![NPM Status](https://img.shields.io/npm/dm/proxies-pool.svg?style=flat-square)](https://www.npmjs.org/package/proxies-pool)
-> HTTP/HTTPS tunnel proxy for luminati.io using round robin strategy.
+> Simple way to handle a pool of proxies using round robin strategy.
## Install
```bash
-$ npm install luminati-tunnel --save
+$ npm install proxies-pool --save
```
## Usage
-The instance is a function that returns a different proxy tunnel every time you call it, using [round robin](https://en.wikipedia.org/wiki/Round-robin_DNS) algorithm.
+The instance is a function that returns a different proxy every time you call it, using [round robin](https://en.wikipedia.org/wiki/Round-robin_DNS) algorithm.
```js
-const luminatiTunnel = require('luminati-tunnel')
-
-const proxies = [ 'proxy1', 'proxy2', 'proxy3' ]
-const tunnel = createTunnel(proxies)
+const proxiesPool = require('proxies-pool')
+const proxies = ['proxy1', 'proxy2', 'proxy3']
+const proxyPool = proxiesPool(proxies)
const url = 'http://lumtest.com/echo.json'
+const createAgent = proxy => ({
+ agent: {
+ http: tunnel.httpOverHttp({ proxy })
+ }
+})
+
;(async () => {
// => it uses 'proxy1'
- await got(url, {
- agent: tunnel(),
- json: true
- })
+ await got(url, { agent: createAgent(proxyPool()) })
// => it uses 'proxy2'
- await got(url, {
- agent: tunnel(),
- json: true
- })
+ await got(url, { agent: createAgent(proxyPool()) })
// => it uses 'proxy3'
- await got(url, {
- agent: tunnel(),
- json: true
- })
+ await got(url, { agent: createAgent(proxyPool()) })
// => it uses 'proxy1'
- await got(url, {
- agent: tunnel(),
- json: true
- })
+ await got(url, { agent: createAgent(proxyPool()) })
})()
```
## API
-### `tunnel = luminatiTunnel(proxies, [fromIndex])`
+### `proxyPool = proxiesPool(proxies, [fromIndex])`
#### proxies
*Required*
Type: `array`
-A collection of the proxy IPs to use.
+A collection of proxies to use.
-You can get it from your [luminati.io](https://luminati.io/) control panel.
+You can get it from your [luminati.io](https://luminati.io) control panel or any compatible provider.
![](https://luminati-holanetworksltd.netdna-ssl.com/www/lum/pub/img/ip_list.png?md5=22129-f8b3b8e5)
@@ -77,9 +70,9 @@ Default: `0`
It specifies the position of the `proxies` collection to start.
-### `tunnel`
+### `proxyPool`
-The instance is a function that returns a different proxy tunnel every time you call it, using [round robin](https://en.wikipedia.org/wiki/Round-robin_DNS) algorithm.
+The instance is a function that returns a different proxy every time you call it, using [round robin](https://en.wikipedia.org/wiki/Round-robin_DNS) algorithm.
#### .current()
@@ -103,7 +96,7 @@ Returns the number of proxies in the pool.
## License
-**luminati-tunnel** © [Kiko Beats](https://kikobeats.com), released under the [MIT](https://github.com/Kikobeats/luminati-tunnel/blob/master/LICENSE.md) License.
-Authored and maintained by Kiko Beats with help from [contributors](https://github.com/Kikobeats/luminati-tunnel/contributors).
+**proxies-pool** © [Kiko Beats](https://kikobeats.com), released under the [MIT](https://github.com/Kikobeats/proxies-pool/blob/master/LICENSE.md) License.
+Authored and maintained by Kiko Beats with help from [contributors](https://github.com/Kikobeats/proxies-pool/contributors).
> [kikobeats.com](https://kikobeats.com) · GitHub [Kiko Beats](https://github.com/Kikobeats) · Twitter [@Kikobeats](https://twitter.com/Kikobeats)
diff --git a/index.js b/index.js
index 33641d7..e392509 100644
--- a/index.js
+++ b/index.js
@@ -1,15 +1,14 @@
'use strict'
-const createTunnel = require('tunnel')
const Cycled = require('cycled')
-const roundRobin = (items, steps) => {
+const roundRobin = (items, fromIndex) => {
const list = new Cycled(items)
- if (steps) list.step(steps)
+ if (fromIndex) list.step(fromIndex)
return list
}
-const parseUri = str => {
+const parse = str => {
const [host, port, user, password] = str.split(':')
return {
host,
@@ -18,28 +17,23 @@ const parseUri = str => {
}
}
-module.exports = (proxies = [], fromIndex = 0) => {
- if (!proxies.length) {
- throw TypeError('You need to provide a collection of proxies.')
- }
-
- const getProxy = roundRobin(proxies.map(parseUri), fromIndex)
+module.exports = (items = [], fromIndex = 0, fn) => {
+ const getProxy = roundRobin(items.map(parse), fromIndex)
- const luminatiTunnel = opts => {
+ const proxyPool = () => {
const proxy = getProxy.current()
- const tunnel = createTunnel.httpsOverHttp({ proxy, ...opts })
getProxy.next()
- return tunnel
+ return proxy
}
- luminatiTunnel.current = getProxy.current.bind(getProxy)
- luminatiTunnel.index = () => getProxy.index
- luminatiTunnel.next = getProxy.next.bind(getProxy)
- luminatiTunnel.previous = getProxy.previous.bind(getProxy)
- luminatiTunnel.size = () => proxies.length
+ proxyPool.current = getProxy.current.bind(getProxy)
+ proxyPool.index = () => getProxy.index
+ proxyPool.next = getProxy.next.bind(getProxy)
+ proxyPool.previous = getProxy.previous.bind(getProxy)
+ proxyPool.size = () => items.length
- return luminatiTunnel
+ return proxyPool
}
module.exports.roundRobin = roundRobin
-module.exports.parseUri = parseUri
+module.exports.parse = parse
diff --git a/package.json b/package.json
index ffe4a9f..c796a71 100644
--- a/package.json
+++ b/package.json
@@ -1,20 +1,20 @@
{
- "name": "luminati-tunnel",
+ "name": "proxies-pool",
"description": "HTTP/HTTPS tunnel proxy for luminati.io using round robin strategy.",
- "homepage": "https://nicedoc.io/Kikobeats/luminati-tunnel",
+ "homepage": "https://nicedoc.io/Kikobeats/proxies-pool",
"version": "1.3.2",
"main": "index.js",
"author": {
- "name": "Kiko Beats",
"email": "josefrancisco.verdu@gmail.com",
+ "name": "Kiko Beats",
"url": "https://kikobeats.com"
},
"repository": {
"type": "git",
- "url": "git+https://github.com/Kikobeats/luminati-tunnel.git"
+ "url": "git+https://github.com/Kikobeats/proxies-pool.git"
},
"bugs": {
- "url": "https://github.com/Kikobeats/luminati-tunnel/issues"
+ "url": "https://github.com/Kikobeats/proxies-pool/issues"
},
"keywords": [
"agent",
@@ -25,13 +25,13 @@
"tunnel"
],
"dependencies": {
- "cycled": "~1.1.0",
- "tunnel": "0.0.6"
+ "cycled": "~1.1.0"
},
"devDependencies": {
"@commitlint/cli": "latest",
"@commitlint/config-conventional": "latest",
"ava": "latest",
+ "ci-publish": "latest",
"conventional-github-releaser": "latest",
"coveralls": "latest",
"finepack": "latest",
@@ -46,11 +46,14 @@
"standard": "latest",
"standard-markdown": "latest",
"standard-version": "latest",
- "ci-publish": "latest"
+ "tunnel": "latest"
},
"engines": {
"node": ">= 8"
},
+ "files": [
+ "index.js"
+ ],
"scripts": {
"clean": "rm -rf node_modules",
"coverage": "nyc report --reporter=text-lcov | coveralls",
@@ -80,19 +83,17 @@
}
},
"lint-staged": {
- "linters": {
- "package.json": [
- "finepack",
- "git add"
- ],
- "*.js": [
- "prettier-standard",
- "git add"
- ],
- "*.md": [
- "standard-markdown",
- "git add"
- ]
- }
+ "package.json": [
+ "finepack",
+ "git add"
+ ],
+ "*.js": [
+ "prettier-standard",
+ "git add"
+ ],
+ "*.md": [
+ "standard-markdown",
+ "git add"
+ ]
}
}
diff --git a/test/index.js b/test/index.js
index d26acf7..ddfb899 100644
--- a/test/index.js
+++ b/test/index.js
@@ -1,24 +1,27 @@
'use strict'
+const tunnel = require('tunnel')
const test = require('ava')
const got = require('got')
-const createTunnel = require('..')
+const proxiesPool = require('..')
const proxies = [process.env.PROXY_ONE, process.env.PROXY_TWO]
-const { parseUri } = createTunnel
-
test('do a request', async t => {
- const tunnel = createTunnel(proxies)
- t.is(tunnel.index(), 0)
- t.deepEqual(tunnel.current(), parseUri(proxies[0]))
- const { statusCode } = await got('http://lumtest.com/echo.json', {
- agent: tunnel(),
- json: true
+ const proxyPool = proxiesPool(proxies, 0, tunnel.httpOverHttp)
+ t.is(proxyPool.index(), 0)
+ t.deepEqual(proxyPool.current(), proxiesPool.parse(proxies[0]))
+
+ const { statusCode } = await got('https://lumtest.com/echo.json', {
+ agent: {
+ http: tunnel.httpOverHttp({
+ proxy: proxyPool()
+ })
+ }
})
t.is(statusCode, 200)
- t.is(tunnel.index(), 1)
- t.deepEqual(tunnel.current(), parseUri(proxies[1]))
+ t.is(proxyPool.index(), 1)
+ t.deepEqual(proxyPool.current(), proxiesPool.parse(proxies[1]))
})
diff --git a/test/parse-uri.js b/test/parse.js
similarity index 86%
rename from test/parse-uri.js
rename to test/parse.js
index eabe193..e6682d5 100644
--- a/test/parse-uri.js
+++ b/test/parse.js
@@ -1,10 +1,10 @@
const test = require('ava')
-const { parseUri } = require('..')
+const { parse } = require('..')
test('parse proxy url into an objet', t => {
t.deepEqual(
- parseUri(
+ parse(
'zproxy.lum-superproxy.io:22225:lum-customer-foo-zone-zone1-ip-0.0.0.0:bar'
),
{