Deployed the page to Github Pages.
This commit is contained in:
parent
1d79754e93
commit
2c89899458
62797 changed files with 6551425 additions and 15279 deletions
793
node_modules/socks/build/client/socksclient.js
generated
vendored
Normal file
793
node_modules/socks/build/client/socksclient.js
generated
vendored
Normal file
|
@ -0,0 +1,793 @@
|
|||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SocksClientError = exports.SocksClient = void 0;
|
||||
const events_1 = require("events");
|
||||
const net = require("net");
|
||||
const smart_buffer_1 = require("smart-buffer");
|
||||
const constants_1 = require("../common/constants");
|
||||
const helpers_1 = require("../common/helpers");
|
||||
const receivebuffer_1 = require("../common/receivebuffer");
|
||||
const util_1 = require("../common/util");
|
||||
Object.defineProperty(exports, "SocksClientError", { enumerable: true, get: function () { return util_1.SocksClientError; } });
|
||||
const ip_address_1 = require("ip-address");
|
||||
class SocksClient extends events_1.EventEmitter {
|
||||
constructor(options) {
|
||||
super();
|
||||
this.options = Object.assign({}, options);
|
||||
// Validate SocksClientOptions
|
||||
(0, helpers_1.validateSocksClientOptions)(options);
|
||||
// Default state
|
||||
this.setState(constants_1.SocksClientState.Created);
|
||||
}
|
||||
/**
|
||||
* 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, callback) {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Validate SocksClientOptions
|
||||
try {
|
||||
(0, helpers_1.validateSocksClientOptions)(options, ['connect']);
|
||||
}
|
||||
catch (err) {
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
return resolve(err); // Resolves pending promise (prevents memory leaks).
|
||||
}
|
||||
else {
|
||||
return reject(err);
|
||||
}
|
||||
}
|
||||
const client = new SocksClient(options);
|
||||
client.connect(options.existing_socket);
|
||||
client.once('established', (info) => {
|
||||
client.removeAllListeners();
|
||||
if (typeof callback === 'function') {
|
||||
callback(null, info);
|
||||
resolve(info); // Resolves pending promise (prevents memory leaks).
|
||||
}
|
||||
else {
|
||||
resolve(info);
|
||||
}
|
||||
});
|
||||
// Error occurred, failed to establish connection.
|
||||
client.once('error', (err) => {
|
||||
client.removeAllListeners();
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
resolve(err); // Resolves pending promise (prevents memory leaks).
|
||||
}
|
||||
else {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 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, callback) {
|
||||
// eslint-disable-next-line no-async-promise-executor
|
||||
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
||||
// Validate SocksClientChainOptions
|
||||
try {
|
||||
(0, helpers_1.validateSocksClientChainOptions)(options);
|
||||
}
|
||||
catch (err) {
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
return resolve(err); // Resolves pending promise (prevents memory leaks).
|
||||
}
|
||||
else {
|
||||
return reject(err);
|
||||
}
|
||||
}
|
||||
// Shuffle proxies
|
||||
if (options.randomizeChain) {
|
||||
(0, util_1.shuffleArray)(options.proxies);
|
||||
}
|
||||
try {
|
||||
let sock;
|
||||
for (let i = 0; i < options.proxies.length; i++) {
|
||||
const nextProxy = options.proxies[i];
|
||||
// If we've reached the last proxy in the chain, the destination is the actual destination, otherwise it's the next proxy.
|
||||
const nextDestination = i === options.proxies.length - 1
|
||||
? options.destination
|
||||
: {
|
||||
host: options.proxies[i + 1].host ||
|
||||
options.proxies[i + 1].ipaddress,
|
||||
port: options.proxies[i + 1].port,
|
||||
};
|
||||
// Creates the next connection in the chain.
|
||||
const result = yield SocksClient.createConnection({
|
||||
command: 'connect',
|
||||
proxy: nextProxy,
|
||||
destination: nextDestination,
|
||||
existing_socket: sock,
|
||||
});
|
||||
// If sock is undefined, assign it here.
|
||||
sock = sock || result.socket;
|
||||
}
|
||||
if (typeof callback === 'function') {
|
||||
callback(null, { socket: sock });
|
||||
resolve({ socket: sock }); // Resolves pending promise (prevents memory leaks).
|
||||
}
|
||||
else {
|
||||
resolve({ socket: sock });
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
resolve(err); // Resolves pending promise (prevents memory leaks).
|
||||
}
|
||||
else {
|
||||
reject(err);
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
/**
|
||||
* Creates a SOCKS UDP Frame.
|
||||
* @param options
|
||||
*/
|
||||
static createUDPFrame(options) {
|
||||
const buff = new smart_buffer_1.SmartBuffer();
|
||||
buff.writeUInt16BE(0);
|
||||
buff.writeUInt8(options.frameNumber || 0);
|
||||
// IPv4/IPv6/Hostname
|
||||
if (net.isIPv4(options.remoteHost.host)) {
|
||||
buff.writeUInt8(constants_1.Socks5HostType.IPv4);
|
||||
buff.writeUInt32BE((0, helpers_1.ipv4ToInt32)(options.remoteHost.host));
|
||||
}
|
||||
else if (net.isIPv6(options.remoteHost.host)) {
|
||||
buff.writeUInt8(constants_1.Socks5HostType.IPv6);
|
||||
buff.writeBuffer((0, helpers_1.ipToBuffer)(options.remoteHost.host));
|
||||
}
|
||||
else {
|
||||
buff.writeUInt8(constants_1.Socks5HostType.Hostname);
|
||||
buff.writeUInt8(Buffer.byteLength(options.remoteHost.host));
|
||||
buff.writeString(options.remoteHost.host);
|
||||
}
|
||||
// Port
|
||||
buff.writeUInt16BE(options.remoteHost.port);
|
||||
// Data
|
||||
buff.writeBuffer(options.data);
|
||||
return buff.toBuffer();
|
||||
}
|
||||
/**
|
||||
* Parses a SOCKS UDP frame.
|
||||
* @param data
|
||||
*/
|
||||
static parseUDPFrame(data) {
|
||||
const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
|
||||
buff.readOffset = 2;
|
||||
const frameNumber = buff.readUInt8();
|
||||
const hostType = buff.readUInt8();
|
||||
let remoteHost;
|
||||
if (hostType === constants_1.Socks5HostType.IPv4) {
|
||||
remoteHost = (0, helpers_1.int32ToIpv4)(buff.readUInt32BE());
|
||||
}
|
||||
else if (hostType === constants_1.Socks5HostType.IPv6) {
|
||||
remoteHost = ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm();
|
||||
}
|
||||
else {
|
||||
remoteHost = buff.readString(buff.readUInt8());
|
||||
}
|
||||
const remotePort = buff.readUInt16BE();
|
||||
return {
|
||||
frameNumber,
|
||||
remoteHost: {
|
||||
host: remoteHost,
|
||||
port: remotePort,
|
||||
},
|
||||
data: buff.readBuffer(),
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Internal state setter. If the SocksClient is in an error state, it cannot be changed to a non error state.
|
||||
*/
|
||||
setState(newState) {
|
||||
if (this.state !== constants_1.SocksClientState.Error) {
|
||||
this.state = newState;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 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) {
|
||||
this.onDataReceived = (data) => this.onDataReceivedHandler(data);
|
||||
this.onClose = () => this.onCloseHandler();
|
||||
this.onError = (err) => this.onErrorHandler(err);
|
||||
this.onConnect = () => this.onConnectHandler();
|
||||
// Start timeout timer (defaults to 30 seconds)
|
||||
const timer = setTimeout(() => this.onEstablishedTimeout(), this.options.timeout || constants_1.DEFAULT_TIMEOUT);
|
||||
// check whether unref is available as it differs from browser to NodeJS (#33)
|
||||
if (timer.unref && typeof timer.unref === 'function') {
|
||||
timer.unref();
|
||||
}
|
||||
// If an existing socket is provided, use it to negotiate SOCKS handshake. Otherwise create a new Socket.
|
||||
if (existingSocket) {
|
||||
this.socket = existingSocket;
|
||||
}
|
||||
else {
|
||||
this.socket = new net.Socket();
|
||||
}
|
||||
// Attach Socket error handlers.
|
||||
this.socket.once('close', this.onClose);
|
||||
this.socket.once('error', this.onError);
|
||||
this.socket.once('connect', this.onConnect);
|
||||
this.socket.on('data', this.onDataReceived);
|
||||
this.setState(constants_1.SocksClientState.Connecting);
|
||||
this.receiveBuffer = new receivebuffer_1.ReceiveBuffer();
|
||||
if (existingSocket) {
|
||||
this.socket.emit('connect');
|
||||
}
|
||||
else {
|
||||
this.socket.connect(this.getSocketOptions());
|
||||
if (this.options.set_tcp_nodelay !== undefined &&
|
||||
this.options.set_tcp_nodelay !== null) {
|
||||
this.socket.setNoDelay(!!this.options.set_tcp_nodelay);
|
||||
}
|
||||
}
|
||||
// Listen for established event so we can re-emit any excess data received during handshakes.
|
||||
this.prependOnceListener('established', (info) => {
|
||||
setImmediate(() => {
|
||||
if (this.receiveBuffer.length > 0) {
|
||||
const excessData = this.receiveBuffer.get(this.receiveBuffer.length);
|
||||
info.socket.emit('data', excessData);
|
||||
}
|
||||
info.socket.resume();
|
||||
});
|
||||
});
|
||||
}
|
||||
// Socket options (defaults host/port to options.proxy.host/options.proxy.port)
|
||||
getSocketOptions() {
|
||||
return Object.assign(Object.assign({}, this.options.socket_options), { host: this.options.proxy.host || this.options.proxy.ipaddress, port: this.options.proxy.port });
|
||||
}
|
||||
/**
|
||||
* Handles internal Socks timeout callback.
|
||||
* Note: If the Socks client is not BoundWaitingForConnection or Established, the connection will be closed.
|
||||
*/
|
||||
onEstablishedTimeout() {
|
||||
if (this.state !== constants_1.SocksClientState.Established &&
|
||||
this.state !== constants_1.SocksClientState.BoundWaitingForConnection) {
|
||||
this.closeSocket(constants_1.ERRORS.ProxyConnectionTimedOut);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Handles Socket connect event.
|
||||
*/
|
||||
onConnectHandler() {
|
||||
this.setState(constants_1.SocksClientState.Connected);
|
||||
// Send initial handshake.
|
||||
if (this.options.proxy.type === 4) {
|
||||
this.sendSocks4InitialHandshake();
|
||||
}
|
||||
else {
|
||||
this.sendSocks5InitialHandshake();
|
||||
}
|
||||
this.setState(constants_1.SocksClientState.SentInitialHandshake);
|
||||
}
|
||||
/**
|
||||
* Handles Socket data event.
|
||||
* @param data
|
||||
*/
|
||||
onDataReceivedHandler(data) {
|
||||
/*
|
||||
All received data is appended to a ReceiveBuffer.
|
||||
This makes sure that all the data we need is received before we attempt to process it.
|
||||
*/
|
||||
this.receiveBuffer.append(data);
|
||||
// Process data that we have.
|
||||
this.processData();
|
||||
}
|
||||
/**
|
||||
* Handles processing of the data we have received.
|
||||
*/
|
||||
processData() {
|
||||
// If we have enough data to process the next step in the SOCKS handshake, proceed.
|
||||
while (this.state !== constants_1.SocksClientState.Established &&
|
||||
this.state !== constants_1.SocksClientState.Error &&
|
||||
this.receiveBuffer.length >= this.nextRequiredPacketBufferSize) {
|
||||
// Sent initial handshake, waiting for response.
|
||||
if (this.state === constants_1.SocksClientState.SentInitialHandshake) {
|
||||
if (this.options.proxy.type === 4) {
|
||||
// Socks v4 only has one handshake response.
|
||||
this.handleSocks4FinalHandshakeResponse();
|
||||
}
|
||||
else {
|
||||
// Socks v5 has two handshakes, handle initial one here.
|
||||
this.handleInitialSocks5HandshakeResponse();
|
||||
}
|
||||
// Sent auth request for Socks v5, waiting for response.
|
||||
}
|
||||
else if (this.state === constants_1.SocksClientState.SentAuthentication) {
|
||||
this.handleInitialSocks5AuthenticationHandshakeResponse();
|
||||
// Sent final Socks v5 handshake, waiting for final response.
|
||||
}
|
||||
else if (this.state === constants_1.SocksClientState.SentFinalHandshake) {
|
||||
this.handleSocks5FinalHandshakeResponse();
|
||||
// Socks BIND established. Waiting for remote connection via proxy.
|
||||
}
|
||||
else if (this.state === constants_1.SocksClientState.BoundWaitingForConnection) {
|
||||
if (this.options.proxy.type === 4) {
|
||||
this.handleSocks4IncomingConnectionResponse();
|
||||
}
|
||||
else {
|
||||
this.handleSocks5IncomingConnectionResponse();
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.closeSocket(constants_1.ERRORS.InternalError);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Handles Socket close event.
|
||||
* @param had_error
|
||||
*/
|
||||
onCloseHandler() {
|
||||
this.closeSocket(constants_1.ERRORS.SocketClosed);
|
||||
}
|
||||
/**
|
||||
* Handles Socket error event.
|
||||
* @param err
|
||||
*/
|
||||
onErrorHandler(err) {
|
||||
this.closeSocket(err.message);
|
||||
}
|
||||
/**
|
||||
* Removes internal event listeners on the underlying Socket.
|
||||
*/
|
||||
removeInternalSocketHandlers() {
|
||||
// Pauses data flow of the socket (this is internally resumed after 'established' is emitted)
|
||||
this.socket.pause();
|
||||
this.socket.removeListener('data', this.onDataReceived);
|
||||
this.socket.removeListener('close', this.onClose);
|
||||
this.socket.removeListener('error', this.onError);
|
||||
this.socket.removeListener('connect', this.onConnect);
|
||||
}
|
||||
/**
|
||||
* Closes and destroys the underlying Socket. Emits an error event.
|
||||
* @param err { String } An error string to include in error event.
|
||||
*/
|
||||
closeSocket(err) {
|
||||
// Make sure only one 'error' event is fired for the lifetime of this SocksClient instance.
|
||||
if (this.state !== constants_1.SocksClientState.Error) {
|
||||
// Set internal state to Error.
|
||||
this.setState(constants_1.SocksClientState.Error);
|
||||
// Destroy Socket
|
||||
this.socket.destroy();
|
||||
// Remove internal listeners
|
||||
this.removeInternalSocketHandlers();
|
||||
// Fire 'error' event.
|
||||
this.emit('error', new util_1.SocksClientError(err, this.options));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Sends initial Socks v4 handshake request.
|
||||
*/
|
||||
sendSocks4InitialHandshake() {
|
||||
const userId = this.options.proxy.userId || '';
|
||||
const buff = new smart_buffer_1.SmartBuffer();
|
||||
buff.writeUInt8(0x04);
|
||||
buff.writeUInt8(constants_1.SocksCommand[this.options.command]);
|
||||
buff.writeUInt16BE(this.options.destination.port);
|
||||
// Socks 4 (IPv4)
|
||||
if (net.isIPv4(this.options.destination.host)) {
|
||||
buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
|
||||
buff.writeStringNT(userId);
|
||||
// Socks 4a (hostname)
|
||||
}
|
||||
else {
|
||||
buff.writeUInt8(0x00);
|
||||
buff.writeUInt8(0x00);
|
||||
buff.writeUInt8(0x00);
|
||||
buff.writeUInt8(0x01);
|
||||
buff.writeStringNT(userId);
|
||||
buff.writeStringNT(this.options.destination.host);
|
||||
}
|
||||
this.nextRequiredPacketBufferSize =
|
||||
constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks4Response;
|
||||
this.socket.write(buff.toBuffer());
|
||||
}
|
||||
/**
|
||||
* Handles Socks v4 handshake response.
|
||||
* @param data
|
||||
*/
|
||||
handleSocks4FinalHandshakeResponse() {
|
||||
const data = this.receiveBuffer.get(8);
|
||||
if (data[1] !== constants_1.Socks4Response.Granted) {
|
||||
this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedConnection} - (${constants_1.Socks4Response[data[1]]})`);
|
||||
}
|
||||
else {
|
||||
// Bind response
|
||||
if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {
|
||||
const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
|
||||
buff.readOffset = 2;
|
||||
const remoteHost = {
|
||||
port: buff.readUInt16BE(),
|
||||
host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
|
||||
};
|
||||
// If host is 0.0.0.0, set to proxy host.
|
||||
if (remoteHost.host === '0.0.0.0') {
|
||||
remoteHost.host = this.options.proxy.ipaddress;
|
||||
}
|
||||
this.setState(constants_1.SocksClientState.BoundWaitingForConnection);
|
||||
this.emit('bound', { remoteHost, socket: this.socket });
|
||||
// Connect response
|
||||
}
|
||||
else {
|
||||
this.setState(constants_1.SocksClientState.Established);
|
||||
this.removeInternalSocketHandlers();
|
||||
this.emit('established', { socket: this.socket });
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Handles Socks v4 incoming connection request (BIND)
|
||||
* @param data
|
||||
*/
|
||||
handleSocks4IncomingConnectionResponse() {
|
||||
const data = this.receiveBuffer.get(8);
|
||||
if (data[1] !== constants_1.Socks4Response.Granted) {
|
||||
this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedIncomingBoundConnection} - (${constants_1.Socks4Response[data[1]]})`);
|
||||
}
|
||||
else {
|
||||
const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
|
||||
buff.readOffset = 2;
|
||||
const remoteHost = {
|
||||
port: buff.readUInt16BE(),
|
||||
host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
|
||||
};
|
||||
this.setState(constants_1.SocksClientState.Established);
|
||||
this.removeInternalSocketHandlers();
|
||||
this.emit('established', { remoteHost, socket: this.socket });
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Sends initial Socks v5 handshake request.
|
||||
*/
|
||||
sendSocks5InitialHandshake() {
|
||||
const buff = new smart_buffer_1.SmartBuffer();
|
||||
// By default we always support no auth.
|
||||
const supportedAuthMethods = [constants_1.Socks5Auth.NoAuth];
|
||||
// We should only tell the proxy we support user/pass auth if auth info is actually provided.
|
||||
// Note: As of Tor v0.3.5.7+, if user/pass auth is an option from the client, by default it will always take priority.
|
||||
if (this.options.proxy.userId || this.options.proxy.password) {
|
||||
supportedAuthMethods.push(constants_1.Socks5Auth.UserPass);
|
||||
}
|
||||
// Custom auth method?
|
||||
if (this.options.proxy.custom_auth_method !== undefined) {
|
||||
supportedAuthMethods.push(this.options.proxy.custom_auth_method);
|
||||
}
|
||||
// Build handshake packet
|
||||
buff.writeUInt8(0x05);
|
||||
buff.writeUInt8(supportedAuthMethods.length);
|
||||
for (const authMethod of supportedAuthMethods) {
|
||||
buff.writeUInt8(authMethod);
|
||||
}
|
||||
this.nextRequiredPacketBufferSize =
|
||||
constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5InitialHandshakeResponse;
|
||||
this.socket.write(buff.toBuffer());
|
||||
this.setState(constants_1.SocksClientState.SentInitialHandshake);
|
||||
}
|
||||
/**
|
||||
* Handles initial Socks v5 handshake response.
|
||||
* @param data
|
||||
*/
|
||||
handleInitialSocks5HandshakeResponse() {
|
||||
const data = this.receiveBuffer.get(2);
|
||||
if (data[0] !== 0x05) {
|
||||
this.closeSocket(constants_1.ERRORS.InvalidSocks5IntiailHandshakeSocksVersion);
|
||||
}
|
||||
else if (data[1] === constants_1.SOCKS5_NO_ACCEPTABLE_AUTH) {
|
||||
this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeNoAcceptedAuthType);
|
||||
}
|
||||
else {
|
||||
// If selected Socks v5 auth method is no auth, send final handshake request.
|
||||
if (data[1] === constants_1.Socks5Auth.NoAuth) {
|
||||
this.socks5ChosenAuthType = constants_1.Socks5Auth.NoAuth;
|
||||
this.sendSocks5CommandRequest();
|
||||
// If selected Socks v5 auth method is user/password, send auth handshake.
|
||||
}
|
||||
else if (data[1] === constants_1.Socks5Auth.UserPass) {
|
||||
this.socks5ChosenAuthType = constants_1.Socks5Auth.UserPass;
|
||||
this.sendSocks5UserPassAuthentication();
|
||||
// If selected Socks v5 auth method is the custom_auth_method, send custom handshake.
|
||||
}
|
||||
else if (data[1] === this.options.proxy.custom_auth_method) {
|
||||
this.socks5ChosenAuthType = this.options.proxy.custom_auth_method;
|
||||
this.sendSocks5CustomAuthentication();
|
||||
}
|
||||
else {
|
||||
this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeUnknownAuthType);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Sends Socks v5 user & password auth handshake.
|
||||
*
|
||||
* Note: No auth and user/pass are currently supported.
|
||||
*/
|
||||
sendSocks5UserPassAuthentication() {
|
||||
const userId = this.options.proxy.userId || '';
|
||||
const password = this.options.proxy.password || '';
|
||||
const buff = new smart_buffer_1.SmartBuffer();
|
||||
buff.writeUInt8(0x01);
|
||||
buff.writeUInt8(Buffer.byteLength(userId));
|
||||
buff.writeString(userId);
|
||||
buff.writeUInt8(Buffer.byteLength(password));
|
||||
buff.writeString(password);
|
||||
this.nextRequiredPacketBufferSize =
|
||||
constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5UserPassAuthenticationResponse;
|
||||
this.socket.write(buff.toBuffer());
|
||||
this.setState(constants_1.SocksClientState.SentAuthentication);
|
||||
}
|
||||
sendSocks5CustomAuthentication() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.nextRequiredPacketBufferSize =
|
||||
this.options.proxy.custom_auth_response_size;
|
||||
this.socket.write(yield this.options.proxy.custom_auth_request_handler());
|
||||
this.setState(constants_1.SocksClientState.SentAuthentication);
|
||||
});
|
||||
}
|
||||
handleSocks5CustomAuthHandshakeResponse(data) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return yield this.options.proxy.custom_auth_response_handler(data);
|
||||
});
|
||||
}
|
||||
handleSocks5AuthenticationNoAuthHandshakeResponse(data) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return data[1] === 0x00;
|
||||
});
|
||||
}
|
||||
handleSocks5AuthenticationUserPassHandshakeResponse(data) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return data[1] === 0x00;
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Handles Socks v5 auth handshake response.
|
||||
* @param data
|
||||
*/
|
||||
handleInitialSocks5AuthenticationHandshakeResponse() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.setState(constants_1.SocksClientState.ReceivedAuthenticationResponse);
|
||||
let authResult = false;
|
||||
if (this.socks5ChosenAuthType === constants_1.Socks5Auth.NoAuth) {
|
||||
authResult = yield this.handleSocks5AuthenticationNoAuthHandshakeResponse(this.receiveBuffer.get(2));
|
||||
}
|
||||
else if (this.socks5ChosenAuthType === constants_1.Socks5Auth.UserPass) {
|
||||
authResult =
|
||||
yield this.handleSocks5AuthenticationUserPassHandshakeResponse(this.receiveBuffer.get(2));
|
||||
}
|
||||
else if (this.socks5ChosenAuthType === this.options.proxy.custom_auth_method) {
|
||||
authResult = yield this.handleSocks5CustomAuthHandshakeResponse(this.receiveBuffer.get(this.options.proxy.custom_auth_response_size));
|
||||
}
|
||||
if (!authResult) {
|
||||
this.closeSocket(constants_1.ERRORS.Socks5AuthenticationFailed);
|
||||
}
|
||||
else {
|
||||
this.sendSocks5CommandRequest();
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Sends Socks v5 final handshake request.
|
||||
*/
|
||||
sendSocks5CommandRequest() {
|
||||
const buff = new smart_buffer_1.SmartBuffer();
|
||||
buff.writeUInt8(0x05);
|
||||
buff.writeUInt8(constants_1.SocksCommand[this.options.command]);
|
||||
buff.writeUInt8(0x00);
|
||||
// ipv4, ipv6, domain?
|
||||
if (net.isIPv4(this.options.destination.host)) {
|
||||
buff.writeUInt8(constants_1.Socks5HostType.IPv4);
|
||||
buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
|
||||
}
|
||||
else if (net.isIPv6(this.options.destination.host)) {
|
||||
buff.writeUInt8(constants_1.Socks5HostType.IPv6);
|
||||
buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
|
||||
}
|
||||
else {
|
||||
buff.writeUInt8(constants_1.Socks5HostType.Hostname);
|
||||
buff.writeUInt8(this.options.destination.host.length);
|
||||
buff.writeString(this.options.destination.host);
|
||||
}
|
||||
buff.writeUInt16BE(this.options.destination.port);
|
||||
this.nextRequiredPacketBufferSize =
|
||||
constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;
|
||||
this.socket.write(buff.toBuffer());
|
||||
this.setState(constants_1.SocksClientState.SentFinalHandshake);
|
||||
}
|
||||
/**
|
||||
* Handles Socks v5 final handshake response.
|
||||
* @param data
|
||||
*/
|
||||
handleSocks5FinalHandshakeResponse() {
|
||||
// Peek at available data (we need at least 5 bytes to get the hostname length)
|
||||
const header = this.receiveBuffer.peek(5);
|
||||
if (header[0] !== 0x05 || header[1] !== constants_1.Socks5Response.Granted) {
|
||||
this.closeSocket(`${constants_1.ERRORS.InvalidSocks5FinalHandshakeRejected} - ${constants_1.Socks5Response[header[1]]}`);
|
||||
}
|
||||
else {
|
||||
// Read address type
|
||||
const addressType = header[3];
|
||||
let remoteHost;
|
||||
let buff;
|
||||
// IPv4
|
||||
if (addressType === constants_1.Socks5HostType.IPv4) {
|
||||
// Check if data is available.
|
||||
const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;
|
||||
if (this.receiveBuffer.length < dataNeeded) {
|
||||
this.nextRequiredPacketBufferSize = dataNeeded;
|
||||
return;
|
||||
}
|
||||
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
|
||||
remoteHost = {
|
||||
host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
|
||||
port: buff.readUInt16BE(),
|
||||
};
|
||||
// If given host is 0.0.0.0, assume remote proxy ip instead.
|
||||
if (remoteHost.host === '0.0.0.0') {
|
||||
remoteHost.host = this.options.proxy.ipaddress;
|
||||
}
|
||||
// Hostname
|
||||
}
|
||||
else if (addressType === constants_1.Socks5HostType.Hostname) {
|
||||
const hostLength = header[4];
|
||||
const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength); // header + host length + host + port
|
||||
// Check if data is available.
|
||||
if (this.receiveBuffer.length < dataNeeded) {
|
||||
this.nextRequiredPacketBufferSize = dataNeeded;
|
||||
return;
|
||||
}
|
||||
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));
|
||||
remoteHost = {
|
||||
host: buff.readString(hostLength),
|
||||
port: buff.readUInt16BE(),
|
||||
};
|
||||
// IPv6
|
||||
}
|
||||
else if (addressType === constants_1.Socks5HostType.IPv6) {
|
||||
// Check if data is available.
|
||||
const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;
|
||||
if (this.receiveBuffer.length < dataNeeded) {
|
||||
this.nextRequiredPacketBufferSize = dataNeeded;
|
||||
return;
|
||||
}
|
||||
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
|
||||
remoteHost = {
|
||||
host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),
|
||||
port: buff.readUInt16BE(),
|
||||
};
|
||||
}
|
||||
// We have everything we need
|
||||
this.setState(constants_1.SocksClientState.ReceivedFinalResponse);
|
||||
// If using CONNECT, the client is now in the established state.
|
||||
if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.connect) {
|
||||
this.setState(constants_1.SocksClientState.Established);
|
||||
this.removeInternalSocketHandlers();
|
||||
this.emit('established', { remoteHost, socket: this.socket });
|
||||
}
|
||||
else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {
|
||||
/* If using BIND, the Socks client is now in BoundWaitingForConnection state.
|
||||
This means that the remote proxy server is waiting for a remote connection to the bound port. */
|
||||
this.setState(constants_1.SocksClientState.BoundWaitingForConnection);
|
||||
this.nextRequiredPacketBufferSize =
|
||||
constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;
|
||||
this.emit('bound', { remoteHost, socket: this.socket });
|
||||
/*
|
||||
If using Associate, the Socks client is now Established. And the proxy server is now accepting UDP packets at the
|
||||
given bound port. This initial Socks TCP connection must remain open for the UDP relay to continue to work.
|
||||
*/
|
||||
}
|
||||
else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.associate) {
|
||||
this.setState(constants_1.SocksClientState.Established);
|
||||
this.removeInternalSocketHandlers();
|
||||
this.emit('established', {
|
||||
remoteHost,
|
||||
socket: this.socket,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Handles Socks v5 incoming connection request (BIND).
|
||||
*/
|
||||
handleSocks5IncomingConnectionResponse() {
|
||||
// Peek at available data (we need at least 5 bytes to get the hostname length)
|
||||
const header = this.receiveBuffer.peek(5);
|
||||
if (header[0] !== 0x05 || header[1] !== constants_1.Socks5Response.Granted) {
|
||||
this.closeSocket(`${constants_1.ERRORS.Socks5ProxyRejectedIncomingBoundConnection} - ${constants_1.Socks5Response[header[1]]}`);
|
||||
}
|
||||
else {
|
||||
// Read address type
|
||||
const addressType = header[3];
|
||||
let remoteHost;
|
||||
let buff;
|
||||
// IPv4
|
||||
if (addressType === constants_1.Socks5HostType.IPv4) {
|
||||
// Check if data is available.
|
||||
const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;
|
||||
if (this.receiveBuffer.length < dataNeeded) {
|
||||
this.nextRequiredPacketBufferSize = dataNeeded;
|
||||
return;
|
||||
}
|
||||
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
|
||||
remoteHost = {
|
||||
host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
|
||||
port: buff.readUInt16BE(),
|
||||
};
|
||||
// If given host is 0.0.0.0, assume remote proxy ip instead.
|
||||
if (remoteHost.host === '0.0.0.0') {
|
||||
remoteHost.host = this.options.proxy.ipaddress;
|
||||
}
|
||||
// Hostname
|
||||
}
|
||||
else if (addressType === constants_1.Socks5HostType.Hostname) {
|
||||
const hostLength = header[4];
|
||||
const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength); // header + host length + port
|
||||
// Check if data is available.
|
||||
if (this.receiveBuffer.length < dataNeeded) {
|
||||
this.nextRequiredPacketBufferSize = dataNeeded;
|
||||
return;
|
||||
}
|
||||
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));
|
||||
remoteHost = {
|
||||
host: buff.readString(hostLength),
|
||||
port: buff.readUInt16BE(),
|
||||
};
|
||||
// IPv6
|
||||
}
|
||||
else if (addressType === constants_1.Socks5HostType.IPv6) {
|
||||
// Check if data is available.
|
||||
const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;
|
||||
if (this.receiveBuffer.length < dataNeeded) {
|
||||
this.nextRequiredPacketBufferSize = dataNeeded;
|
||||
return;
|
||||
}
|
||||
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
|
||||
remoteHost = {
|
||||
host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),
|
||||
port: buff.readUInt16BE(),
|
||||
};
|
||||
}
|
||||
this.setState(constants_1.SocksClientState.Established);
|
||||
this.removeInternalSocketHandlers();
|
||||
this.emit('established', { remoteHost, socket: this.socket });
|
||||
}
|
||||
}
|
||||
get socksClientOptions() {
|
||||
return Object.assign({}, this.options);
|
||||
}
|
||||
}
|
||||
exports.SocksClient = SocksClient;
|
||||
//# sourceMappingURL=socksclient.js.map
|
1
node_modules/socks/build/client/socksclient.js.map
generated
vendored
Normal file
1
node_modules/socks/build/client/socksclient.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
108
node_modules/socks/build/common/constants.js
generated
vendored
Normal file
108
node_modules/socks/build/common/constants.js
generated
vendored
Normal file
|
@ -0,0 +1,108 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SOCKS5_NO_ACCEPTABLE_AUTH = exports.SOCKS5_CUSTOM_AUTH_END = exports.SOCKS5_CUSTOM_AUTH_START = exports.SOCKS_INCOMING_PACKET_SIZES = exports.SocksClientState = exports.Socks5Response = exports.Socks5HostType = exports.Socks5Auth = exports.Socks4Response = exports.SocksCommand = exports.ERRORS = exports.DEFAULT_TIMEOUT = void 0;
|
||||
const DEFAULT_TIMEOUT = 30000;
|
||||
exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
|
||||
// prettier-ignore
|
||||
const ERRORS = {
|
||||
InvalidSocksCommand: 'An invalid SOCKS command was provided. Valid options are connect, bind, and associate.',
|
||||
InvalidSocksCommandForOperation: 'An invalid SOCKS command was provided. Only a subset of commands are supported for this operation.',
|
||||
InvalidSocksCommandChain: 'An invalid SOCKS command was provided. Chaining currently only supports the connect command.',
|
||||
InvalidSocksClientOptionsDestination: 'An invalid destination host was provided.',
|
||||
InvalidSocksClientOptionsExistingSocket: 'An invalid existing socket was provided. This should be an instance of stream.Duplex.',
|
||||
InvalidSocksClientOptionsProxy: 'Invalid SOCKS proxy details were provided.',
|
||||
InvalidSocksClientOptionsTimeout: 'An invalid timeout value was provided. Please enter a value above 0 (in ms).',
|
||||
InvalidSocksClientOptionsProxiesLength: 'At least two socks proxies must be provided for chaining.',
|
||||
InvalidSocksClientOptionsCustomAuthRange: 'Custom auth must be a value between 0x80 and 0xFE.',
|
||||
InvalidSocksClientOptionsCustomAuthOptions: 'When a custom_auth_method is provided, custom_auth_request_handler, custom_auth_response_size, and custom_auth_response_handler must also be provided and valid.',
|
||||
NegotiationError: 'Negotiation error',
|
||||
SocketClosed: 'Socket closed',
|
||||
ProxyConnectionTimedOut: 'Proxy connection timed out',
|
||||
InternalError: 'SocksClient internal error (this should not happen)',
|
||||
InvalidSocks4HandshakeResponse: 'Received invalid Socks4 handshake response',
|
||||
Socks4ProxyRejectedConnection: 'Socks4 Proxy rejected connection',
|
||||
InvalidSocks4IncomingConnectionResponse: 'Socks4 invalid incoming connection response',
|
||||
Socks4ProxyRejectedIncomingBoundConnection: 'Socks4 Proxy rejected incoming bound connection',
|
||||
InvalidSocks5InitialHandshakeResponse: 'Received invalid Socks5 initial handshake response',
|
||||
InvalidSocks5IntiailHandshakeSocksVersion: 'Received invalid Socks5 initial handshake (invalid socks version)',
|
||||
InvalidSocks5InitialHandshakeNoAcceptedAuthType: 'Received invalid Socks5 initial handshake (no accepted authentication type)',
|
||||
InvalidSocks5InitialHandshakeUnknownAuthType: 'Received invalid Socks5 initial handshake (unknown authentication type)',
|
||||
Socks5AuthenticationFailed: 'Socks5 Authentication failed',
|
||||
InvalidSocks5FinalHandshake: 'Received invalid Socks5 final handshake response',
|
||||
InvalidSocks5FinalHandshakeRejected: 'Socks5 proxy rejected connection',
|
||||
InvalidSocks5IncomingConnectionResponse: 'Received invalid Socks5 incoming connection response',
|
||||
Socks5ProxyRejectedIncomingBoundConnection: 'Socks5 Proxy rejected incoming bound connection',
|
||||
};
|
||||
exports.ERRORS = ERRORS;
|
||||
const SOCKS_INCOMING_PACKET_SIZES = {
|
||||
Socks5InitialHandshakeResponse: 2,
|
||||
Socks5UserPassAuthenticationResponse: 2,
|
||||
// Command response + incoming connection (bind)
|
||||
Socks5ResponseHeader: 5, // We need at least 5 to read the hostname length, then we wait for the address+port information.
|
||||
Socks5ResponseIPv4: 10, // 4 header + 4 ip + 2 port
|
||||
Socks5ResponseIPv6: 22, // 4 header + 16 ip + 2 port
|
||||
Socks5ResponseHostname: (hostNameLength) => hostNameLength + 7, // 4 header + 1 host length + host + 2 port
|
||||
// Command response + incoming connection (bind)
|
||||
Socks4Response: 8, // 2 header + 2 port + 4 ip
|
||||
};
|
||||
exports.SOCKS_INCOMING_PACKET_SIZES = SOCKS_INCOMING_PACKET_SIZES;
|
||||
var SocksCommand;
|
||||
(function (SocksCommand) {
|
||||
SocksCommand[SocksCommand["connect"] = 1] = "connect";
|
||||
SocksCommand[SocksCommand["bind"] = 2] = "bind";
|
||||
SocksCommand[SocksCommand["associate"] = 3] = "associate";
|
||||
})(SocksCommand || (exports.SocksCommand = SocksCommand = {}));
|
||||
var Socks4Response;
|
||||
(function (Socks4Response) {
|
||||
Socks4Response[Socks4Response["Granted"] = 90] = "Granted";
|
||||
Socks4Response[Socks4Response["Failed"] = 91] = "Failed";
|
||||
Socks4Response[Socks4Response["Rejected"] = 92] = "Rejected";
|
||||
Socks4Response[Socks4Response["RejectedIdent"] = 93] = "RejectedIdent";
|
||||
})(Socks4Response || (exports.Socks4Response = Socks4Response = {}));
|
||||
var Socks5Auth;
|
||||
(function (Socks5Auth) {
|
||||
Socks5Auth[Socks5Auth["NoAuth"] = 0] = "NoAuth";
|
||||
Socks5Auth[Socks5Auth["GSSApi"] = 1] = "GSSApi";
|
||||
Socks5Auth[Socks5Auth["UserPass"] = 2] = "UserPass";
|
||||
})(Socks5Auth || (exports.Socks5Auth = Socks5Auth = {}));
|
||||
const SOCKS5_CUSTOM_AUTH_START = 0x80;
|
||||
exports.SOCKS5_CUSTOM_AUTH_START = SOCKS5_CUSTOM_AUTH_START;
|
||||
const SOCKS5_CUSTOM_AUTH_END = 0xfe;
|
||||
exports.SOCKS5_CUSTOM_AUTH_END = SOCKS5_CUSTOM_AUTH_END;
|
||||
const SOCKS5_NO_ACCEPTABLE_AUTH = 0xff;
|
||||
exports.SOCKS5_NO_ACCEPTABLE_AUTH = SOCKS5_NO_ACCEPTABLE_AUTH;
|
||||
var Socks5Response;
|
||||
(function (Socks5Response) {
|
||||
Socks5Response[Socks5Response["Granted"] = 0] = "Granted";
|
||||
Socks5Response[Socks5Response["Failure"] = 1] = "Failure";
|
||||
Socks5Response[Socks5Response["NotAllowed"] = 2] = "NotAllowed";
|
||||
Socks5Response[Socks5Response["NetworkUnreachable"] = 3] = "NetworkUnreachable";
|
||||
Socks5Response[Socks5Response["HostUnreachable"] = 4] = "HostUnreachable";
|
||||
Socks5Response[Socks5Response["ConnectionRefused"] = 5] = "ConnectionRefused";
|
||||
Socks5Response[Socks5Response["TTLExpired"] = 6] = "TTLExpired";
|
||||
Socks5Response[Socks5Response["CommandNotSupported"] = 7] = "CommandNotSupported";
|
||||
Socks5Response[Socks5Response["AddressNotSupported"] = 8] = "AddressNotSupported";
|
||||
})(Socks5Response || (exports.Socks5Response = Socks5Response = {}));
|
||||
var Socks5HostType;
|
||||
(function (Socks5HostType) {
|
||||
Socks5HostType[Socks5HostType["IPv4"] = 1] = "IPv4";
|
||||
Socks5HostType[Socks5HostType["Hostname"] = 3] = "Hostname";
|
||||
Socks5HostType[Socks5HostType["IPv6"] = 4] = "IPv6";
|
||||
})(Socks5HostType || (exports.Socks5HostType = Socks5HostType = {}));
|
||||
var SocksClientState;
|
||||
(function (SocksClientState) {
|
||||
SocksClientState[SocksClientState["Created"] = 0] = "Created";
|
||||
SocksClientState[SocksClientState["Connecting"] = 1] = "Connecting";
|
||||
SocksClientState[SocksClientState["Connected"] = 2] = "Connected";
|
||||
SocksClientState[SocksClientState["SentInitialHandshake"] = 3] = "SentInitialHandshake";
|
||||
SocksClientState[SocksClientState["ReceivedInitialHandshakeResponse"] = 4] = "ReceivedInitialHandshakeResponse";
|
||||
SocksClientState[SocksClientState["SentAuthentication"] = 5] = "SentAuthentication";
|
||||
SocksClientState[SocksClientState["ReceivedAuthenticationResponse"] = 6] = "ReceivedAuthenticationResponse";
|
||||
SocksClientState[SocksClientState["SentFinalHandshake"] = 7] = "SentFinalHandshake";
|
||||
SocksClientState[SocksClientState["ReceivedFinalResponse"] = 8] = "ReceivedFinalResponse";
|
||||
SocksClientState[SocksClientState["BoundWaitingForConnection"] = 9] = "BoundWaitingForConnection";
|
||||
SocksClientState[SocksClientState["Established"] = 10] = "Established";
|
||||
SocksClientState[SocksClientState["Disconnected"] = 11] = "Disconnected";
|
||||
SocksClientState[SocksClientState["Error"] = 99] = "Error";
|
||||
})(SocksClientState || (exports.SocksClientState = SocksClientState = {}));
|
||||
//# sourceMappingURL=constants.js.map
|
1
node_modules/socks/build/common/constants.js.map
generated
vendored
Normal file
1
node_modules/socks/build/common/constants.js.map
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":";;;AAGA,MAAM,eAAe,GAAG,KAAK,CAAC;AAyM5B,0CAAe;AArMjB,kBAAkB;AAClB,MAAM,MAAM,GAAG;IACb,mBAAmB,EAAE,wFAAwF;IAC7G,+BAA+B,EAAE,oGAAoG;IACrI,wBAAwB,EAAE,8FAA8F;IACxH,oCAAoC,EAAE,2CAA2C;IACjF,uCAAuC,EAAE,uFAAuF;IAChI,8BAA8B,EAAE,4CAA4C;IAC5E,gCAAgC,EAAE,8EAA8E;IAChH,sCAAsC,EAAE,2DAA2D;IACnG,wCAAwC,EAAE,oDAAoD;IAC9F,0CAA0C,EAAE,kKAAkK;IAC9M,gBAAgB,EAAE,mBAAmB;IACrC,YAAY,EAAE,eAAe;IAC7B,uBAAuB,EAAE,4BAA4B;IACrD,aAAa,EAAE,qDAAqD;IACpE,8BAA8B,EAAE,4CAA4C;IAC5E,6BAA6B,EAAE,kCAAkC;IACjE,uCAAuC,EAAE,6CAA6C;IACtF,0CAA0C,EAAE,iDAAiD;IAC7F,qCAAqC,EAAE,oDAAoD;IAC3F,yCAAyC,EAAE,mEAAmE;IAC9G,+CAA+C,EAAE,6EAA6E;IAC9H,4CAA4C,EAAE,yEAAyE;IACvH,0BAA0B,EAAE,8BAA8B;IAC1D,2BAA2B,EAAE,kDAAkD;IAC/E,mCAAmC,EAAE,kCAAkC;IACvE,uCAAuC,EAAE,sDAAsD;IAC/F,0CAA0C,EAAE,iDAAiD;CAC9F,CAAC;AAyKA,wBAAM;AAvKR,MAAM,2BAA2B,GAAG;IAClC,8BAA8B,EAAE,CAAC;IACjC,oCAAoC,EAAE,CAAC;IACvC,gDAAgD;IAChD,oBAAoB,EAAE,CAAC,EAAE,iGAAiG;IAC1H,kBAAkB,EAAE,EAAE,EAAE,2BAA2B;IACnD,kBAAkB,EAAE,EAAE,EAAE,4BAA4B;IACpD,sBAAsB,EAAE,CAAC,cAAsB,EAAE,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,2CAA2C;IACnH,gDAAgD;IAChD,cAAc,EAAE,CAAC,EAAE,2BAA2B;CAC/C,CAAC;AA6KA,kEAA2B;AAzK7B,IAAK,YAIJ;AAJD,WAAK,YAAY;IACf,qDAAc,CAAA;IACd,+CAAW,CAAA;IACX,yDAAgB,CAAA;AAClB,CAAC,EAJI,YAAY,4BAAZ,YAAY,QAIhB;AAED,IAAK,cAKJ;AALD,WAAK,cAAc;IACjB,0DAAc,CAAA;IACd,wDAAa,CAAA;IACb,4DAAe,CAAA;IACf,sEAAoB,CAAA;AACtB,CAAC,EALI,cAAc,8BAAd,cAAc,QAKlB;AAED,IAAK,UAIJ;AAJD,WAAK,UAAU;IACb,+CAAa,CAAA;IACb,+CAAa,CAAA;IACb,mDAAe,CAAA;AACjB,CAAC,EAJI,UAAU,0BAAV,UAAU,QAId;AAED,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAuJpC,4DAAwB;AAtJ1B,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAuJlC,wDAAsB;AArJxB,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAsJrC,8DAAyB;AApJ3B,IAAK,cAUJ;AAVD,WAAK,cAAc;IACjB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,+DAAiB,CAAA;IACjB,+EAAyB,CAAA;IACzB,yEAAsB,CAAA;IACtB,6EAAwB,CAAA;IACxB,+DAAiB,CAAA;IACjB,iFAA0B,CAAA;IAC1B,iFAA0B,CAAA;AAC5B,CAAC,EAVI,cAAc,8BAAd,cAAc,QAUlB;AAED,IAAK,cAIJ;AAJD,WAAK,cAAc;IACjB,mDAAW,CAAA;IACX,2DAAe,CAAA;IACf,mDAAW,CAAA;AACb,CAAC,EAJI,cAAc,8BAAd,cAAc,QAIlB;AAED,IAAK,gBAcJ;AAdD,WAAK,gBAAgB;IACnB,6DAAW,CAAA;IACX,mEAAc,CAAA;IACd,iEAAa,CAAA;IACb,uFAAwB,CAAA;IACxB,+GAAoC,CAAA;IACpC,mFAAsB,CAAA;IACtB,2GAAkC,CAAA;IAClC,mFAAsB,CAAA;IACtB,yFAAyB,CAAA;IACzB,iGAA6B,CAAA;IAC7B,sEAAgB,CAAA;IAChB,wEAAiB,CAAA;IACjB,0DAAU,CAAA;AACZ,CAAC,EAdI,gBAAgB,gCAAhB,gBAAgB,QAcpB"}
|
166
node_modules/socks/build/common/helpers.js
generated
vendored
Normal file
166
node_modules/socks/build/common/helpers.js
generated
vendored
Normal file
|
@ -0,0 +1,166 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ipToBuffer = exports.int32ToIpv4 = exports.ipv4ToInt32 = exports.validateSocksClientChainOptions = exports.validateSocksClientOptions = void 0;
|
||||
const util_1 = require("./util");
|
||||
const constants_1 = require("./constants");
|
||||
const stream = require("stream");
|
||||
const ip_address_1 = require("ip-address");
|
||||
const net = require("net");
|
||||
/**
|
||||
* Validates the provided SocksClientOptions
|
||||
* @param options { SocksClientOptions }
|
||||
* @param acceptedCommands { string[] } A list of accepted SocksProxy commands.
|
||||
*/
|
||||
function validateSocksClientOptions(options, acceptedCommands = ['connect', 'bind', 'associate']) {
|
||||
// Check SOCKs command option.
|
||||
if (!constants_1.SocksCommand[options.command]) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommand, options);
|
||||
}
|
||||
// Check SocksCommand for acceptable command.
|
||||
if (acceptedCommands.indexOf(options.command) === -1) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandForOperation, options);
|
||||
}
|
||||
// Check destination
|
||||
if (!isValidSocksRemoteHost(options.destination)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);
|
||||
}
|
||||
// Check SOCKS proxy to use
|
||||
if (!isValidSocksProxy(options.proxy)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);
|
||||
}
|
||||
// Validate custom auth (if set)
|
||||
validateCustomProxyAuth(options.proxy, options);
|
||||
// Check timeout
|
||||
if (options.timeout && !isValidTimeoutValue(options.timeout)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);
|
||||
}
|
||||
// Check existing_socket (if provided)
|
||||
if (options.existing_socket &&
|
||||
!(options.existing_socket instanceof stream.Duplex)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsExistingSocket, options);
|
||||
}
|
||||
}
|
||||
exports.validateSocksClientOptions = validateSocksClientOptions;
|
||||
/**
|
||||
* Validates the SocksClientChainOptions
|
||||
* @param options { SocksClientChainOptions }
|
||||
*/
|
||||
function validateSocksClientChainOptions(options) {
|
||||
// Only connect is supported when chaining.
|
||||
if (options.command !== 'connect') {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandChain, options);
|
||||
}
|
||||
// Check destination
|
||||
if (!isValidSocksRemoteHost(options.destination)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);
|
||||
}
|
||||
// Validate proxies (length)
|
||||
if (!(options.proxies &&
|
||||
Array.isArray(options.proxies) &&
|
||||
options.proxies.length >= 2)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxiesLength, options);
|
||||
}
|
||||
// Validate proxies
|
||||
options.proxies.forEach((proxy) => {
|
||||
if (!isValidSocksProxy(proxy)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);
|
||||
}
|
||||
// Validate custom auth (if set)
|
||||
validateCustomProxyAuth(proxy, options);
|
||||
});
|
||||
// Check timeout
|
||||
if (options.timeout && !isValidTimeoutValue(options.timeout)) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);
|
||||
}
|
||||
}
|
||||
exports.validateSocksClientChainOptions = validateSocksClientChainOptions;
|
||||
function validateCustomProxyAuth(proxy, options) {
|
||||
if (proxy.custom_auth_method !== undefined) {
|
||||
// Invalid auth method range
|
||||
if (proxy.custom_auth_method < constants_1.SOCKS5_CUSTOM_AUTH_START ||
|
||||
proxy.custom_auth_method > constants_1.SOCKS5_CUSTOM_AUTH_END) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthRange, options);
|
||||
}
|
||||
// Missing custom_auth_request_handler
|
||||
if (proxy.custom_auth_request_handler === undefined ||
|
||||
typeof proxy.custom_auth_request_handler !== 'function') {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
|
||||
}
|
||||
// Missing custom_auth_response_size
|
||||
if (proxy.custom_auth_response_size === undefined) {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
|
||||
}
|
||||
// Missing/invalid custom_auth_response_handler
|
||||
if (proxy.custom_auth_response_handler === undefined ||
|
||||
typeof proxy.custom_auth_response_handler !== 'function') {
|
||||
throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Validates a SocksRemoteHost
|
||||
* @param remoteHost { SocksRemoteHost }
|
||||
*/
|
||||
function isValidSocksRemoteHost(remoteHost) {
|
||||
return (remoteHost &&
|
||||
typeof remoteHost.host === 'string' &&
|
||||
typeof remoteHost.port === 'number' &&
|
||||
remoteHost.port >= 0 &&
|
||||
remoteHost.port <= 65535);
|
||||
}
|
||||
/**
|
||||
* Validates a SocksProxy
|
||||
* @param proxy { SocksProxy }
|
||||
*/
|
||||
function isValidSocksProxy(proxy) {
|
||||
return (proxy &&
|
||||
(typeof proxy.host === 'string' || typeof proxy.ipaddress === 'string') &&
|
||||
typeof proxy.port === 'number' &&
|
||||
proxy.port >= 0 &&
|
||||
proxy.port <= 65535 &&
|
||||
(proxy.type === 4 || proxy.type === 5));
|
||||
}
|
||||
/**
|
||||
* Validates a timeout value.
|
||||
* @param value { Number }
|
||||
*/
|
||||
function isValidTimeoutValue(value) {
|
||||
return typeof value === 'number' && value > 0;
|
||||
}
|
||||
function ipv4ToInt32(ip) {
|
||||
const address = new ip_address_1.Address4(ip);
|
||||
// Convert the IPv4 address parts to an integer
|
||||
return address.toArray().reduce((acc, part) => (acc << 8) + part, 0);
|
||||
}
|
||||
exports.ipv4ToInt32 = ipv4ToInt32;
|
||||
function int32ToIpv4(int32) {
|
||||
// Extract each byte (octet) from the 32-bit integer
|
||||
const octet1 = (int32 >>> 24) & 0xff;
|
||||
const octet2 = (int32 >>> 16) & 0xff;
|
||||
const octet3 = (int32 >>> 8) & 0xff;
|
||||
const octet4 = int32 & 0xff;
|
||||
// Combine the octets into a string in IPv4 format
|
||||
return [octet1, octet2, octet3, octet4].join('.');
|
||||
}
|
||||
exports.int32ToIpv4 = int32ToIpv4;
|
||||
function ipToBuffer(ip) {
|
||||
if (net.isIPv4(ip)) {
|
||||
// Handle IPv4 addresses
|
||||
const address = new ip_address_1.Address4(ip);
|
||||
return Buffer.from(address.toArray());
|
||||
}
|
||||
else if (net.isIPv6(ip)) {
|
||||
// Handle IPv6 addresses
|
||||
const address = new ip_address_1.Address6(ip);
|
||||
return Buffer.from(address
|
||||
.canonicalForm()
|
||||
.split(':')
|
||||
.map((segment) => segment.padStart(4, '0'))
|
||||
.join(''), 'hex');
|
||||
}
|
||||
else {
|
||||
throw new Error('Invalid IP address format');
|
||||
}
|
||||
}
|
||||
exports.ipToBuffer = ipToBuffer;
|
||||
//# sourceMappingURL=helpers.js.map
|
1
node_modules/socks/build/common/helpers.js.map
generated
vendored
Normal file
1
node_modules/socks/build/common/helpers.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
43
node_modules/socks/build/common/receivebuffer.js
generated
vendored
Normal file
43
node_modules/socks/build/common/receivebuffer.js
generated
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ReceiveBuffer = void 0;
|
||||
class ReceiveBuffer {
|
||||
constructor(size = 4096) {
|
||||
this.buffer = Buffer.allocUnsafe(size);
|
||||
this.offset = 0;
|
||||
this.originalSize = size;
|
||||
}
|
||||
get length() {
|
||||
return this.offset;
|
||||
}
|
||||
append(data) {
|
||||
if (!Buffer.isBuffer(data)) {
|
||||
throw new Error('Attempted to append a non-buffer instance to ReceiveBuffer.');
|
||||
}
|
||||
if (this.offset + data.length >= this.buffer.length) {
|
||||
const tmp = this.buffer;
|
||||
this.buffer = Buffer.allocUnsafe(Math.max(this.buffer.length + this.originalSize, this.buffer.length + data.length));
|
||||
tmp.copy(this.buffer);
|
||||
}
|
||||
data.copy(this.buffer, this.offset);
|
||||
return (this.offset += data.length);
|
||||
}
|
||||
peek(length) {
|
||||
if (length > this.offset) {
|
||||
throw new Error('Attempted to read beyond the bounds of the managed internal data.');
|
||||
}
|
||||
return this.buffer.slice(0, length);
|
||||
}
|
||||
get(length) {
|
||||
if (length > this.offset) {
|
||||
throw new Error('Attempted to read beyond the bounds of the managed internal data.');
|
||||
}
|
||||
const value = Buffer.allocUnsafe(length);
|
||||
this.buffer.slice(0, length).copy(value);
|
||||
this.buffer.copyWithin(0, length, length + this.offset - length);
|
||||
this.offset -= length;
|
||||
return value;
|
||||
}
|
||||
}
|
||||
exports.ReceiveBuffer = ReceiveBuffer;
|
||||
//# sourceMappingURL=receivebuffer.js.map
|
1
node_modules/socks/build/common/receivebuffer.js.map
generated
vendored
Normal file
1
node_modules/socks/build/common/receivebuffer.js.map
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"receivebuffer.js","sourceRoot":"","sources":["../../src/common/receivebuffer.ts"],"names":[],"mappings":";;;AAAA,MAAM,aAAa;IAKjB,YAAY,IAAI,GAAG,IAAI;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAC9B,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EACtC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CACjC,CACF,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QAEtB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAEO,sCAAa"}
|
25
node_modules/socks/build/common/util.js
generated
vendored
Normal file
25
node_modules/socks/build/common/util.js
generated
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.shuffleArray = exports.SocksClientError = void 0;
|
||||
/**
|
||||
* Error wrapper for SocksClient
|
||||
*/
|
||||
class SocksClientError extends Error {
|
||||
constructor(message, options) {
|
||||
super(message);
|
||||
this.options = options;
|
||||
}
|
||||
}
|
||||
exports.SocksClientError = SocksClientError;
|
||||
/**
|
||||
* Shuffles a given array.
|
||||
* @param array The array to shuffle.
|
||||
*/
|
||||
function shuffleArray(array) {
|
||||
for (let i = array.length - 1; i > 0; i--) {
|
||||
const j = Math.floor(Math.random() * (i + 1));
|
||||
[array[i], array[j]] = [array[j], array[i]];
|
||||
}
|
||||
}
|
||||
exports.shuffleArray = shuffleArray;
|
||||
//# sourceMappingURL=util.js.map
|
1
node_modules/socks/build/common/util.js.map
generated
vendored
Normal file
1
node_modules/socks/build/common/util.js.map
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/common/util.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAM,gBAAiB,SAAQ,KAAK;IAClC,YACE,OAAe,EACR,OAAqD;QAE5D,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,YAAO,GAAP,OAAO,CAA8C;IAG9D,CAAC;CACF;AAaO,4CAAgB;AAXxB;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAgB;IACpC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAEyB,oCAAY"}
|
18
node_modules/socks/build/index.js
generated
vendored
Normal file
18
node_modules/socks/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
__exportStar(require("./client/socksclient"), exports);
|
||||
//# sourceMappingURL=index.js.map
|
1
node_modules/socks/build/index.js.map
generated
vendored
Normal file
1
node_modules/socks/build/index.js.map
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC"}
|
Loading…
Add table
Add a link
Reference in a new issue