| /// <reference types="node" /> |
| /// <reference types="node" /> |
| /// <reference types="node" /> |
| import { EventEmitter } from 'events'; |
| import { SocksClientOptions, SocksClientChainOptions, SocksRemoteHost, SocksProxy, SocksClientBoundEvent, SocksClientEstablishedEvent, SocksUDPFrameDetails } from '../common/constants'; |
| import { SocksClientError } from '../common/util'; |
| import { Duplex } from 'stream'; |
| declare interface SocksClient { |
| on(event: 'error', listener: (err: SocksClientError) => void): this; |
| on(event: 'bound', listener: (info: SocksClientBoundEvent) => void): this; |
| on(event: 'established', listener: (info: SocksClientEstablishedEvent) => void): this; |
| once(event: string, listener: (...args: unknown[]) => void): this; |
| once(event: 'error', listener: (err: SocksClientError) => void): this; |
| once(event: 'bound', listener: (info: SocksClientBoundEvent) => void): this; |
| once(event: 'established', listener: (info: SocksClientEstablishedEvent) => void): this; |
| emit(event: string | symbol, ...args: unknown[]): boolean; |
| emit(event: 'error', err: SocksClientError): boolean; |
| emit(event: 'bound', info: SocksClientBoundEvent): boolean; |
| emit(event: 'established', info: SocksClientEstablishedEvent): boolean; |
| } |
| declare class SocksClient extends EventEmitter implements SocksClient { |
| private options; |
| private socket; |
| private state; |
| private receiveBuffer; |
| private nextRequiredPacketBufferSize; |
| private socks5ChosenAuthType; |
| private onDataReceived; |
| private onClose; |
| private onError; |
| private onConnect; |
| constructor(options: SocksClientOptions); |
| /** |
| * Creates a new SOCKS connection. |
| * |
| * Note: Supports callbacks and promises. Only supports the connect command. |
| * @param options { SocksClientOptions } Options. |
| * @param callback { Function } An optional callback function. |
| * @returns { Promise } |
| */ |
| static createConnection(options: SocksClientOptions, callback?: (error: Error | null, info?: SocksClientEstablishedEvent) => void): Promise<SocksClientEstablishedEvent>; |
| /** |
| * Creates a new SOCKS connection chain to a destination host through 2 or more SOCKS proxies. |
| * |
| * Note: Supports callbacks and promises. Only supports the connect method. |
| * Note: Implemented via createConnection() factory function. |
| * @param options { SocksClientChainOptions } Options |
| * @param callback { Function } An optional callback function. |
| * @returns { Promise } |
| */ |
| static createConnectionChain(options: SocksClientChainOptions, callback?: (error: Error | null, socket?: SocksClientEstablishedEvent) => void): Promise<SocksClientEstablishedEvent>; |
| /** |
| * Creates a SOCKS UDP Frame. |
| * @param options |
| */ |
| static createUDPFrame(options: SocksUDPFrameDetails): Buffer; |
| /** |
| * Parses a SOCKS UDP frame. |
| * @param data |
| */ |
| static parseUDPFrame(data: Buffer): SocksUDPFrameDetails; |
| /** |
| * Internal state setter. If the SocksClient is in an error state, it cannot be changed to a non error state. |
| */ |
| private setState; |
| /** |
| * Starts the connection establishment to the proxy and destination. |
| * @param existingSocket Connected socket to use instead of creating a new one (internal use). |
| */ |
| connect(existingSocket?: Duplex): void; |
| private getSocketOptions; |
| /** |
| * Handles internal Socks timeout callback. |
| * Note: If the Socks client is not BoundWaitingForConnection or Established, the connection will be closed. |
| */ |
| private onEstablishedTimeout; |
| /** |
| * Handles Socket connect event. |
| */ |
| private onConnectHandler; |
| /** |
| * Handles Socket data event. |
| * @param data |
| */ |
| private onDataReceivedHandler; |
| /** |
| * Handles processing of the data we have received. |
| */ |
| private processData; |
| /** |
| * Handles Socket close event. |
| * @param had_error |
| */ |
| private onCloseHandler; |
| /** |
| * Handles Socket error event. |
| * @param err |
| */ |
| private onErrorHandler; |
| /** |
| * Removes internal event listeners on the underlying Socket. |
| */ |
| private removeInternalSocketHandlers; |
| /** |
| * Closes and destroys the underlying Socket. Emits an error event. |
| * @param err { String } An error string to include in error event. |
| */ |
| private closeSocket; |
| /** |
| * Sends initial Socks v4 handshake request. |
| */ |
| private sendSocks4InitialHandshake; |
| /** |
| * Handles Socks v4 handshake response. |
| * @param data |
| */ |
| private handleSocks4FinalHandshakeResponse; |
| /** |
| * Handles Socks v4 incoming connection request (BIND) |
| * @param data |
| */ |
| private handleSocks4IncomingConnectionResponse; |
| /** |
| * Sends initial Socks v5 handshake request. |
| */ |
| private sendSocks5InitialHandshake; |
| /** |
| * Handles initial Socks v5 handshake response. |
| * @param data |
| */ |
| private handleInitialSocks5HandshakeResponse; |
| /** |
| * Sends Socks v5 user & password auth handshake. |
| * |
| * Note: No auth and user/pass are currently supported. |
| */ |
| private sendSocks5UserPassAuthentication; |
| private sendSocks5CustomAuthentication; |
| private handleSocks5CustomAuthHandshakeResponse; |
| private handleSocks5AuthenticationNoAuthHandshakeResponse; |
| private handleSocks5AuthenticationUserPassHandshakeResponse; |
| /** |
| * Handles Socks v5 auth handshake response. |
| * @param data |
| */ |
| private handleInitialSocks5AuthenticationHandshakeResponse; |
| /** |
| * Sends Socks v5 final handshake request. |
| */ |
| private sendSocks5CommandRequest; |
| /** |
| * Handles Socks v5 final handshake response. |
| * @param data |
| */ |
| private handleSocks5FinalHandshakeResponse; |
| /** |
| * Handles Socks v5 incoming connection request (BIND). |
| */ |
| private handleSocks5IncomingConnectionResponse; |
| get socksClientOptions(): SocksClientOptions; |
| } |
| export { SocksClient, SocksClientOptions, SocksClientChainOptions, SocksClientError, SocksRemoteHost, SocksProxy, SocksUDPFrameDetails, }; |