/// 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 };