Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
200 lines
12 KiB
JavaScript
200 lines
12 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.PromisedNetSockets = void 0;
|
|
const net_1 = require("net");
|
|
const socks_1 = require("socks");
|
|
const async_mutex_1 = require("async-mutex");
|
|
const ProxyUtil = require("@src/util/ProxyUtil");
|
|
const mutex = new async_mutex_1.Mutex();
|
|
const closeError = new Error("NetSocket was closed");
|
|
|
|
|
|
class PromisedNetSockets {
|
|
constructor(proxy) {
|
|
this.client = undefined;
|
|
this.closed = true;
|
|
this.stream = Buffer.alloc(0);
|
|
if (!(proxy === null || proxy === void 0 ? void 0 : proxy.MTProxy)) {
|
|
// we only want to use this when it's not an MTProto proxy.
|
|
if (proxy) {
|
|
if (!proxy.ip || !proxy.port || !proxy.socksType) {
|
|
throw new Error(`Invalid sockets params. ${proxy.ip}, ${proxy.port}, ${proxy.socksType}`);
|
|
}
|
|
}
|
|
this.proxy = proxy;
|
|
}
|
|
}
|
|
async readExactly(number) {
|
|
let readData = Buffer.alloc(0);
|
|
while (true) {
|
|
const thisTime = await this.read(number);
|
|
readData = Buffer.concat([readData, thisTime]);
|
|
number = number - thisTime.length;
|
|
if (!number) {
|
|
return readData;
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
async read(number) {
|
|
if (this.closed) {
|
|
throw closeError;
|
|
}
|
|
await this.canRead;
|
|
if (this.closed) {
|
|
throw closeError;
|
|
}
|
|
const toReturn = this.stream.slice(0, number);
|
|
this.stream = this.stream.slice(number);
|
|
if (this.stream.length === 0) {
|
|
this.canRead = new Promise((resolve) => {
|
|
this.resolveRead = resolve;
|
|
});
|
|
}
|
|
return toReturn;
|
|
}
|
|
|
|
//
|
|
async readAll() {
|
|
if (this.closed || !(await this.canRead)) {
|
|
throw closeError;
|
|
}
|
|
const toReturn = this.stream;
|
|
this.stream = Buffer.alloc(0);
|
|
this.canRead = new Promise((resolve) => {
|
|
this.resolveRead = resolve;
|
|
});
|
|
return toReturn;
|
|
}
|
|
/**
|
|
* Creates a new connection
|
|
* @param port
|
|
* @param ip
|
|
* @returns {Promise<void>}
|
|
*/
|
|
async connect(port, ip) {
|
|
this.stream = Buffer.alloc(0);
|
|
let connected = false;
|
|
if (this.proxy) {
|
|
try {
|
|
const info = await socks_1.SocksClient.createConnection({
|
|
proxy: {
|
|
host: this.proxy.ip,
|
|
port: this.proxy.port,
|
|
type: this.proxy.socksType !== undefined
|
|
? this.proxy.socksType
|
|
: 5,
|
|
userId: this.proxy.username,
|
|
password: this.proxy.password,
|
|
},
|
|
command: "connect",
|
|
timeout: (this.proxy.timeout || 5) * 1000,
|
|
destination: {
|
|
host: ip,
|
|
port: port,
|
|
},
|
|
});
|
|
this.client = info.socket;
|
|
connected = true;
|
|
}catch (e){
|
|
console.log("代理源码报错");
|
|
if(e){
|
|
console.log(e);
|
|
}
|
|
if(e.toString().indexOf("Proxy connection timed out")!==-1 || e.toString().indexOf("connect ECONNREFUSED") !== -1){
|
|
let proxyObj=await ProxyUtil.getInstance().getSocks5ByRandomCountry();
|
|
if(!proxyObj)return;
|
|
this.proxy={
|
|
ip:proxyObj.ip,
|
|
port:Number(proxyObj.port),
|
|
};
|
|
return this.connect(port,ip);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
this.client = new net_1.Socket();
|
|
}
|
|
this.canRead = new Promise((resolve) => {
|
|
this.resolveRead = resolve;
|
|
});
|
|
this.closed = false;
|
|
return new Promise((resolve, reject) => {
|
|
if (this.client) {
|
|
if (connected) {
|
|
this.receive();
|
|
resolve(this);
|
|
}
|
|
else {
|
|
this.client.connect(port, ip, () => {
|
|
this.receive();
|
|
resolve(this);
|
|
});
|
|
}
|
|
this.client.on("error", (e)=>{
|
|
console.log("源码client报错")
|
|
if(e){
|
|
console.log(e.toString());
|
|
}
|
|
});
|
|
this.client.on("close", () => {
|
|
if (this.client && this.client.destroyed) {
|
|
if (this.resolveRead) {
|
|
this.resolveRead(false);
|
|
}
|
|
this.closed = true;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
//
|
|
write(data) {
|
|
if (this.closed) {
|
|
throw closeError;
|
|
}
|
|
if (this.client) {
|
|
try {
|
|
this.client.write(data);
|
|
}catch (e){
|
|
console.log("write写流报错")
|
|
if(e){
|
|
console.log(e.toString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
async close() {
|
|
if (this.client) {
|
|
await this.client.destroy();
|
|
this.client.unref();
|
|
}
|
|
this.closed = true;
|
|
}
|
|
|
|
//
|
|
async receive() {
|
|
if (this.client) {
|
|
this.client.on("data", async (message) => {
|
|
const release = await mutex.acquire();
|
|
try {
|
|
let data;
|
|
//CONTEST BROWSER
|
|
this.stream = Buffer.concat([this.stream, message]);
|
|
if (this.resolveRead) {
|
|
this.resolveRead(true);
|
|
}
|
|
}
|
|
finally {
|
|
release();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
exports.PromisedNetSockets = PromisedNetSockets;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvbWlzZWROZXRTb2NrZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZ3JhbWpzL2V4dGVuc2lvbnMvUHJvbWlzZWROZXRTb2NrZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3QixpQ0FBb0M7QUFFcEMsNkNBQW9DO0FBR3BDLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0FBRTFCLE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFFckQsTUFBYSxrQkFBa0I7SUFRM0IsWUFBWSxLQUFzQjtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sQ0FBQSxFQUFFO1lBQ2pCLDJEQUEyRDtZQUMzRCxJQUFJLEtBQUssRUFBRTtnQkFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO29CQUM5QyxNQUFNLElBQUksS0FBSyxDQUNYLDJCQUEyQixLQUFLLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUMzRSxDQUFDO2lCQUNMO2FBQ0o7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWM7UUFDNUIsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLElB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
|