///
import HttpConnect from "./http.connect";
import Socks5Connect from "./socks5.connect";
import { DirectConnect } from "./direct";
import LightConnect from "./light.connect";
import AigoConnect from "./aigo.connect";
import S52AigoConnect from "./s52aigo.connect";
import WSConnect from "./ws.connect";
import Connect from "./connect";
import { Proxy, ConnectOptions, ConnectUser, AuthData, StreamEvent, StreamTransport } from "../types";
import ForwardHttpConnect from "./forward.http.connect";
import EventEmitter from "eventemitter3";
import { IOSocket } from "../stream";
import { ProtocolType } from "./types";
import { IPipe } from "../";
export type RequestData = {
type: "peer" | "socket";
host: string;
port: number;
source: string;
status: boolean;
ttl: number;
message?: string;
};
export type ConnectPipe = {
host: string;
port: number;
localSocket: IOSocket;
data: Buffer;
user?: ConnectUser;
};
export type EventName = StreamTransport & StreamEvent & {
request: (data: RequestData) => void;
auth: (data: AuthData) => void;
error: (err: Error) => void;
open: () => void;
close: (data: {
id: string;
host: string;
port: number;
}) => void;
/**
* 连接代理/目标socket事件, 通知 连接状态
*/
connect: (data: {
status: boolean;
ttl: number;
error?: any;
host: string;
port: number;
protocol: string;
proxy: Proxy;
}) => void;
};
/**
* 连接代理的封装类
*/
export default class ConnectFactor extends EventEmitter {
readonly ipipe: IPipe;
static HttpConnect: typeof HttpConnect;
static Socks5Connect: typeof Socks5Connect;
static DirectConnect: typeof DirectConnect;
static LightConnect: typeof LightConnect;
static AigoConnect: typeof AigoConnect;
static WSConnect: typeof WSConnect;
static Connect: typeof Connect;
private directConnectDomains;
/** 连接器列表 */
private connects;
private options;
/** 代理服务器信息 */
proxys: Proxy[];
constructor(ipipe: IPipe, options?: ConnectOptions);
get(protocol: ProtocolType): Connect | undefined;
getConnects(): Connect[];
/**
* 注册连接方式
* @param connect
*/
register(connect: Connect): this;
setTimeout(timeout?: number): void;
removeProxy(host: string, port: number): void;
/**
* 删除所有代理
*/
removeAllProxy(): void;
/**
* 注册代理服务器
* @param proxy
*/
registerProxy(proxy: Proxy): boolean;
/**
* 检测代理
* @param callback
* {
* success: 成功数量
* fail: 失败数量
* }
* @param interval 检测间隔,单位ms
*/
checkProxy(callback: (data: {
success: number;
fail: number;
}) => void, interval?: number): void;
findProxy(host: string, user?: ConnectUser): Proxy;
/**
* 隧道转发数据
* @param proxy
* @param localSocket
* @param chunk
*/
pipe({ host, port, localSocket, user, data: chunk }: ConnectPipe): Promise;
/**
* 注册直接连接的域名
* @param domain
*/
registerDirectDomain(domain: string): void;
}
export { Connect, HttpConnect, Socks5Connect, DirectConnect, AigoConnect, LightConnect, ForwardHttpConnect, S52AigoConnect, WSConnect };