@mutagen-d/node-proxy-server
Advanced tools
+1
-1
| { | ||
| "name": "@mutagen-d/node-proxy-server", | ||
| "version": "1.0.2", | ||
| "version": "1.1.0", | ||
| "description": "Http and socks proxy server", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
+15
-1
@@ -8,2 +8,3 @@ # Proxy Server | ||
| - [Usage](#usage) | ||
| - [TLS](#tls) | ||
| - [Authorization](#authorization) | ||
@@ -17,3 +18,3 @@ - [Keep Alive](#keepalive) | ||
| ```js | ||
| const { createProxyServer } = require('./src') | ||
| const { createProxyServer } = require('@mutagen-d/node-proxy-server') | ||
| const port = 8080 | ||
@@ -27,2 +28,15 @@ const server = createProxyServer() | ||
| ## Tls | ||
| create tls server | ||
| ```js | ||
| const fs = require('fs') | ||
| const path = require('path') | ||
| const server = createProxyServer({ | ||
| cert: fs.readFileSync(path.join(__dirname, './cert.pem'), 'utf-8'), | ||
| key: fs.readFileSync(path.join(__dirname, './key.pem'), 'utf-8'), | ||
| }) | ||
| ``` | ||
| ## Authorization | ||
@@ -29,0 +43,0 @@ |
+23
-13
@@ -29,2 +29,3 @@ const net = require('net') | ||
| * on(event: 'proxy-connection', listener: (connection: import('stream').Duplex, info: ConnectionInfo)): ProxyServer; | ||
| * on(event: 'secureConnection', listener: (socket: tls.TLSSocket) => any): ProxyServer; | ||
| * } & net.Server} ProxyServer | ||
@@ -35,6 +36,5 @@ * @typedef {{ dstHost: string, dstPort: number; srcHost: string; srcPort: number }} ConnectionInfo | ||
| * auth?: boolean; | ||
| * }} ProxyServerOptions | ||
| * } & Pick<Parameters<tls['createServer']>[0], 'ca' | 'cert' | 'key'>} ProxyServerOptions | ||
| */ | ||
| /** | ||
@@ -46,9 +46,19 @@ * @param {ProxyServerOptions} [options] | ||
| const createProxyConnection = options && options.createProxyConnection || createTCPConnection | ||
| const tlsOpts = options ? { ca: options.ca, cert: options.cert, key: options.key } : {} | ||
| const isTlsServer = tlsOpts.ca || tlsOpts.cert || tlsOpts.key | ||
| /** @type {ProxyServer} */ | ||
| const server = net.createServer(); | ||
| server.on('connection', (socket) => { | ||
| socket._server = server; | ||
| socket.on('error', onSocketError) | ||
| socket.once('data', onConnectionHandshake) | ||
| }) | ||
| const server = isTlsServer ? tls.createServer(tlsOpts) : net.createServer(); | ||
| if (isTlsServer) { | ||
| server.on('secureConnection', (socket) => { | ||
| socket._server = server; | ||
| socket.on('error', onSocketError) | ||
| socket.once('data', onConnectionHandshake) | ||
| }) | ||
| } else { | ||
| server.on('connection', (socket) => { | ||
| socket._server = server; | ||
| socket.on('error', onSocketError) | ||
| socket.once('data', onConnectionHandshake) | ||
| }) | ||
| } | ||
| server.on('http-proxy', (socket, data, options) => { | ||
@@ -101,4 +111,5 @@ if (!auth.enabled) { | ||
| server.emit('proxy-connection', conn, { dstHost, dstPort, srcHost, srcPort }) | ||
| if (options.headers['proxy-authorization']) { | ||
| if (options.headers['proxy-authorization'] || options.headers['proxy-connection']) { | ||
| delete options.headers['proxy-authorization'] | ||
| delete options.headers['proxy-connection'] | ||
| conn.write(serializeHTTP(options)) | ||
@@ -276,7 +287,6 @@ } else { | ||
| const socket = net.createConnection({ host: info.dstHost, port: info.dstPort }) | ||
| const conn = options && options.url.indexOf('https:') === 0 ? new tls.TLSSocket(socket, { rejectUnauthorized: false }) : socket; | ||
| /** @type {Deffer<net.Socket>} */ | ||
| /** @type {Deffer<net.Socket | tls.TLSSocket>} */ | ||
| const deffer = new Deffer() | ||
| conn.on('connect', () => deffer.resolve(conn)) | ||
| conn.on('error', (err) => deffer.reject(err)) | ||
| socket.on('connect', () => deffer.resolve(socket)) | ||
| socket.on('error', (err) => deffer.reject(err)) | ||
| return deffer.promise; | ||
@@ -283,0 +293,0 @@ } |
+2
-0
@@ -24,2 +24,3 @@ /** | ||
| body = data.subarray(i + 2) | ||
| break | ||
| } | ||
@@ -29,2 +30,3 @@ if (data[i] === CR && data[i + 1] === LF && data[i + 2] === CR && data[i + 3] === LF) { | ||
| body = data.subarray(i + 4) | ||
| break | ||
| } | ||
@@ -31,0 +33,0 @@ } |
Network access
Supply chain riskThis module accesses the network.
Found 3 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 3 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 1 instance in 1 package
26043
3.51%680
1.95%107
15.05%