kaven-utils
Version:
Utils for Node.js.
47 lines (46 loc) • 1.85 kB
JavaScript
/********************************************************************
* @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);
});
});
}
}