summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/socks/build/common/helpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/socks/build/common/helpers.js')
-rw-r--r--deps/npm/node_modules/socks/build/common/helpers.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/deps/npm/node_modules/socks/build/common/helpers.js b/deps/npm/node_modules/socks/build/common/helpers.js
new file mode 100644
index 0000000000..ffed4a740c
--- /dev/null
+++ b/deps/npm/node_modules/socks/build/common/helpers.js
@@ -0,0 +1,101 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const util_1 = require("./util");
+const constants_1 = require("./constants");
+const net = require("net");
+const stream = require("stream");
+/**
+ * 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);
+ }
+ // 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);
+ }
+ });
+ // Check timeout
+ if (options.timeout && !isValidTimeoutValue(options.timeout)) {
+ throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);
+ }
+}
+exports.validateSocksClientChainOptions = validateSocksClientChainOptions;
+/**
+ * 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 &&
+ net.isIP(proxy.ipaddress) &&
+ 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;
+}
+//# sourceMappingURL=helpers.js.map \ No newline at end of file