UNPKG

kaven-utils

Version:

Utils for Node.js.

47 lines (46 loc) 1.85 kB
/******************************************************************** * @author: Kaven * @email: kaven@wuwenkai.com * @website: http://blog.kaven.xyz * @file: [Kaven-Utils] /src/net/proxy/TlsProxyClient.ts * @create: 2022-04-20 13:47:57.734 * @modify: 2023-12-07 10:59:05.550 * @version: 5.4.0 * @times: 20 * @lines: 51 * @copyright: Copyright © 2022-2023 Kaven. All Rights Reserved. * @description: [description] * @license: [license] ********************************************************************/ import { Strings_CR_LF } from "kaven-basic"; import { connect } from "node:tls"; import { HttpProxyServer } from "./HttpProxyServer.js"; import { InternalLogger } from "../../KavenUtility.Internal.js"; export class TlsProxyClient extends HttpProxyServer { options; constructor(options) { super(); this.options = options; } connect(port, host) { return new Promise((resolve, reject) => { const socket = connect(this.options, () => { const localToRemote = `[${socket.localAddress}:${socket.localPort} -> ${socket.remoteAddress}:${socket.remotePort}]`; InternalLogger()?.Info(`[TlsProxyClient]${localToRemote} Server connected, authorized: ${socket.authorized}`); socket.write(`${host}:${port}${Strings_CR_LF}`); socket.once("data", (data) => { const line = data.toString().TrimEnd(Strings_CR_LF); if (line === "OK") { resolve(socket); } else { reject(new Error(line)); } }); }); socket.on("error", err => { reject(err); }); }); } }