You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					153 lines
				
				4.7 KiB
			
		
		
			
		
	
	
					153 lines
				
				4.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								/// <reference types="node" />
							 | 
						||
| 
								 | 
							
								/// <reference types="node" />
							 | 
						||
| 
								 | 
							
								/// <reference types="node" />
							 | 
						||
| 
								 | 
							
								import { Duplex } from 'stream';
							 | 
						||
| 
								 | 
							
								import { Socket, SocketConnectOpts } from 'net';
							 | 
						||
| 
								 | 
							
								import { RequireOnlyOne } from './util';
							 | 
						||
| 
								 | 
							
								declare const DEFAULT_TIMEOUT = 30000;
							 | 
						||
| 
								 | 
							
								declare type SocksProxyType = 4 | 5;
							 | 
						||
| 
								 | 
							
								declare const ERRORS: {
							 | 
						||
| 
								 | 
							
								    InvalidSocksCommand: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksCommandForOperation: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksCommandChain: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksClientOptionsDestination: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksClientOptionsExistingSocket: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksClientOptionsProxy: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksClientOptionsTimeout: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksClientOptionsProxiesLength: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksClientOptionsCustomAuthRange: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocksClientOptionsCustomAuthOptions: string;
							 | 
						||
| 
								 | 
							
								    NegotiationError: string;
							 | 
						||
| 
								 | 
							
								    SocketClosed: string;
							 | 
						||
| 
								 | 
							
								    ProxyConnectionTimedOut: string;
							 | 
						||
| 
								 | 
							
								    InternalError: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks4HandshakeResponse: string;
							 | 
						||
| 
								 | 
							
								    Socks4ProxyRejectedConnection: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks4IncomingConnectionResponse: string;
							 | 
						||
| 
								 | 
							
								    Socks4ProxyRejectedIncomingBoundConnection: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks5InitialHandshakeResponse: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks5IntiailHandshakeSocksVersion: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks5InitialHandshakeNoAcceptedAuthType: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks5InitialHandshakeUnknownAuthType: string;
							 | 
						||
| 
								 | 
							
								    Socks5AuthenticationFailed: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks5FinalHandshake: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks5FinalHandshakeRejected: string;
							 | 
						||
| 
								 | 
							
								    InvalidSocks5IncomingConnectionResponse: string;
							 | 
						||
| 
								 | 
							
								    Socks5ProxyRejectedIncomingBoundConnection: string;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								declare const SOCKS_INCOMING_PACKET_SIZES: {
							 | 
						||
| 
								 | 
							
								    Socks5InitialHandshakeResponse: number;
							 | 
						||
| 
								 | 
							
								    Socks5UserPassAuthenticationResponse: number;
							 | 
						||
| 
								 | 
							
								    Socks5ResponseHeader: number;
							 | 
						||
| 
								 | 
							
								    Socks5ResponseIPv4: number;
							 | 
						||
| 
								 | 
							
								    Socks5ResponseIPv6: number;
							 | 
						||
| 
								 | 
							
								    Socks5ResponseHostname: (hostNameLength: number) => number;
							 | 
						||
| 
								 | 
							
								    Socks4Response: number;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								declare type SocksCommandOption = 'connect' | 'bind' | 'associate';
							 | 
						||
| 
								 | 
							
								declare enum SocksCommand {
							 | 
						||
| 
								 | 
							
								    connect = 1,
							 | 
						||
| 
								 | 
							
								    bind = 2,
							 | 
						||
| 
								 | 
							
								    associate = 3
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								declare enum Socks4Response {
							 | 
						||
| 
								 | 
							
								    Granted = 90,
							 | 
						||
| 
								 | 
							
								    Failed = 91,
							 | 
						||
| 
								 | 
							
								    Rejected = 92,
							 | 
						||
| 
								 | 
							
								    RejectedIdent = 93
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								declare enum Socks5Auth {
							 | 
						||
| 
								 | 
							
								    NoAuth = 0,
							 | 
						||
| 
								 | 
							
								    GSSApi = 1,
							 | 
						||
| 
								 | 
							
								    UserPass = 2
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								declare const SOCKS5_CUSTOM_AUTH_START = 128;
							 | 
						||
| 
								 | 
							
								declare const SOCKS5_CUSTOM_AUTH_END = 254;
							 | 
						||
| 
								 | 
							
								declare const SOCKS5_NO_ACCEPTABLE_AUTH = 255;
							 | 
						||
| 
								 | 
							
								declare enum Socks5Response {
							 | 
						||
| 
								 | 
							
								    Granted = 0,
							 | 
						||
| 
								 | 
							
								    Failure = 1,
							 | 
						||
| 
								 | 
							
								    NotAllowed = 2,
							 | 
						||
| 
								 | 
							
								    NetworkUnreachable = 3,
							 | 
						||
| 
								 | 
							
								    HostUnreachable = 4,
							 | 
						||
| 
								 | 
							
								    ConnectionRefused = 5,
							 | 
						||
| 
								 | 
							
								    TTLExpired = 6,
							 | 
						||
| 
								 | 
							
								    CommandNotSupported = 7,
							 | 
						||
| 
								 | 
							
								    AddressNotSupported = 8
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								declare enum Socks5HostType {
							 | 
						||
| 
								 | 
							
								    IPv4 = 1,
							 | 
						||
| 
								 | 
							
								    Hostname = 3,
							 | 
						||
| 
								 | 
							
								    IPv6 = 4
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								declare enum SocksClientState {
							 | 
						||
| 
								 | 
							
								    Created = 0,
							 | 
						||
| 
								 | 
							
								    Connecting = 1,
							 | 
						||
| 
								 | 
							
								    Connected = 2,
							 | 
						||
| 
								 | 
							
								    SentInitialHandshake = 3,
							 | 
						||
| 
								 | 
							
								    ReceivedInitialHandshakeResponse = 4,
							 | 
						||
| 
								 | 
							
								    SentAuthentication = 5,
							 | 
						||
| 
								 | 
							
								    ReceivedAuthenticationResponse = 6,
							 | 
						||
| 
								 | 
							
								    SentFinalHandshake = 7,
							 | 
						||
| 
								 | 
							
								    ReceivedFinalResponse = 8,
							 | 
						||
| 
								 | 
							
								    BoundWaitingForConnection = 9,
							 | 
						||
| 
								 | 
							
								    Established = 10,
							 | 
						||
| 
								 | 
							
								    Disconnected = 11,
							 | 
						||
| 
								 | 
							
								    Error = 99
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Represents a SocksProxy
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare type SocksProxy = RequireOnlyOne<{
							 | 
						||
| 
								 | 
							
								    ipaddress?: string;
							 | 
						||
| 
								 | 
							
								    host?: string;
							 | 
						||
| 
								 | 
							
								    port: number;
							 | 
						||
| 
								 | 
							
								    type: SocksProxyType;
							 | 
						||
| 
								 | 
							
								    userId?: string;
							 | 
						||
| 
								 | 
							
								    password?: string;
							 | 
						||
| 
								 | 
							
								    custom_auth_method?: number;
							 | 
						||
| 
								 | 
							
								    custom_auth_request_handler?: () => Promise<Buffer>;
							 | 
						||
| 
								 | 
							
								    custom_auth_response_size?: number;
							 | 
						||
| 
								 | 
							
								    custom_auth_response_handler?: (data: Buffer) => Promise<boolean>;
							 | 
						||
| 
								 | 
							
								}, 'host' | 'ipaddress'>;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Represents a remote host
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								interface SocksRemoteHost {
							 | 
						||
| 
								 | 
							
								    host: string;
							 | 
						||
| 
								 | 
							
								    port: number;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * SocksClient connection options.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								interface SocksClientOptions {
							 | 
						||
| 
								 | 
							
								    command: SocksCommandOption;
							 | 
						||
| 
								 | 
							
								    destination: SocksRemoteHost;
							 | 
						||
| 
								 | 
							
								    proxy: SocksProxy;
							 | 
						||
| 
								 | 
							
								    timeout?: number;
							 | 
						||
| 
								 | 
							
								    existing_socket?: Duplex;
							 | 
						||
| 
								 | 
							
								    set_tcp_nodelay?: boolean;
							 | 
						||
| 
								 | 
							
								    socket_options?: SocketConnectOpts;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * SocksClient chain connection options.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								interface SocksClientChainOptions {
							 | 
						||
| 
								 | 
							
								    command: 'connect';
							 | 
						||
| 
								 | 
							
								    destination: SocksRemoteHost;
							 | 
						||
| 
								 | 
							
								    proxies: SocksProxy[];
							 | 
						||
| 
								 | 
							
								    timeout?: number;
							 | 
						||
| 
								 | 
							
								    randomizeChain?: false;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								interface SocksClientEstablishedEvent {
							 | 
						||
| 
								 | 
							
								    socket: Socket;
							 | 
						||
| 
								 | 
							
								    remoteHost?: SocksRemoteHost;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								declare type SocksClientBoundEvent = SocksClientEstablishedEvent;
							 | 
						||
| 
								 | 
							
								interface SocksUDPFrameDetails {
							 | 
						||
| 
								 | 
							
								    frameNumber?: number;
							 | 
						||
| 
								 | 
							
								    remoteHost: SocksRemoteHost;
							 | 
						||
| 
								 | 
							
								    data: Buffer;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export { DEFAULT_TIMEOUT, ERRORS, SocksProxyType, SocksCommand, Socks4Response, Socks5Auth, Socks5HostType, Socks5Response, SocksClientState, SocksProxy, SocksRemoteHost, SocksCommandOption, SocksClientOptions, SocksClientChainOptions, SocksClientEstablishedEvent, SocksClientBoundEvent, SocksUDPFrameDetails, SOCKS_INCOMING_PACKET_SIZES, SOCKS5_CUSTOM_AUTH_START, SOCKS5_CUSTOM_AUTH_END, SOCKS5_NO_ACCEPTABLE_AUTH, };
							 |