@bigbinary/neeto-molecules 4.0.111 → 4.1.0-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IpRestriction.js +1 -1
- package/dist/IpRestriction.js.map +1 -1
- package/dist/PhoneNumber.js +2 -2
- package/dist/SessionEnvironment.js +1 -1
- package/dist/cjs/IpRestriction.js +1 -1
- package/dist/cjs/IpRestriction.js.map +1 -1
- package/dist/cjs/PhoneNumber.js +1 -1
- package/dist/cjs/SessionEnvironment.js +1 -1
- package/dist/cjs/{phone-number-bolYVokE.js → phone-number-CKeWRcTL.js} +2 -2
- package/dist/cjs/{phone-number-bolYVokE.js.map → phone-number-CKeWRcTL.js.map} +1 -1
- package/dist/{phone-number-DzOGxsrm.js → phone-number-HpVGHffA.js} +2 -2
- package/dist/{phone-number-DzOGxsrm.js.map → phone-number-HpVGHffA.js.map} +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IpRestriction.js","sources":["../node_modules/ip-num/dist/src/BinaryUtils.js","../node_modules/ip-num/dist/src/IPv6Utils.js","../node_modules/ip-num/dist/src/HexadecimalUtils.js","../node_modules/ip-num/dist/src/Validator.js","../node_modules/ip-num/dist/src/Hexadecatet.js","../node_modules/ip-num/dist/src/Octet.js","../node_modules/ip-num/dist/src/IPNumber.js","../node_modules/ip-num/dist/src/IPNumType.js","../node_modules/ip-num/dist/src/Prefix.js","../node_modules/ip-num/dist/src/IPRange.js","../node_modules/ip-num/dist/src/IPPool.js","../node_modules/ip-num/dist/src/index.js","../src/components/IpRestriction/utils.js","../src/components/IpRestriction/constants.js","../src/components/IpRestriction/AllowedIpRanges/AllowedIpRange.jsx","../src/components/IpRestriction/AllowedIpRanges/index.jsx","../src/components/IpRestriction/apis/current_ip.js","../src/components/IpRestriction/hooks/reactQuery/useCurrentIp.js","../src/components/IpRestriction/CurrentIp.jsx","../src/components/IpRestriction/apis/allowed_ip_ranges.js","../src/components/IpRestriction/hooks/reactQuery/useAllowedIpRanges.js","../src/components/IpRestriction/apis/ip_restriction.js","../src/components/IpRestriction/hooks/reactQuery/useIpRestrictions.js","../src/components/IpRestriction/index.jsx"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.matchingBitCount = exports.intLog2 = exports.cidrPrefixToMaskBinaryString = exports.leftPadWithZeroBit = exports.dottedDecimalNotationToBinaryString = exports.parseBinaryStringToBigInt = exports.decimalNumberToOctetString = exports.numberToBinaryString = void 0;\n/**\n * Converts a decimal number to binary string\n *\n * @param num number to parse\n * @returns {string} the binary string representation of number\n */\nlet numberToBinaryString = (num) => {\n return num.toString(2);\n};\nexports.numberToBinaryString = numberToBinaryString;\n/**\n * Converts a decimal number to binary octet (8 bit) string. If needed the octet will be padded with zeros\n * to make it up to 8 bits\n *\n * @param {number} num to convert to octet string\n * @returns {string} the octet string representation of given number\n */\nlet decimalNumberToOctetString = (num) => {\n let binaryString = (0, exports.numberToBinaryString)(num);\n let length = binaryString.length;\n if (length > 8) {\n throw new Error(\"Given decimal in binary contains digits greater than an octet\");\n }\n return (0, exports.leftPadWithZeroBit)(binaryString, 8);\n};\nexports.decimalNumberToOctetString = decimalNumberToOctetString;\n/**\n * Parses number in binary to number in BigInt\n *\n * @param num binary number in string to parse\n * @returns {number} binary number in BigInt\n */\nlet parseBinaryStringToBigInt = (num) => {\n return BigInt(`0b${num}`);\n};\nexports.parseBinaryStringToBigInt = parseBinaryStringToBigInt;\n/**\n * Given an IPv4 number in dot-decimal notated string, e.g 192.168.0.1 converts it to\n * binary string, e.g. '11000000101010000000000000000001'\n *\n * @param dottedDecimal IPv4 string in dot-decimal notation\n * @returns {string} the binary value of the given ipv4 number in string\n */\nlet dottedDecimalNotationToBinaryString = (dottedDecimal) => {\n let stringOctets = dottedDecimal.split(\".\");\n return stringOctets.reduce((binaryAsString, octet) => {\n return binaryAsString.concat((0, exports.decimalNumberToOctetString)(parseInt(octet)));\n }, '');\n};\nexports.dottedDecimalNotationToBinaryString = dottedDecimalNotationToBinaryString;\n/**\n * Given a binary string, adds a number of zero to the left until string is as long as the given string length\n * @param {string} binaryString the string to pad\n * @param {number} finalStringLength the final length of string after padding\n * @returns {string}\n */\nlet leftPadWithZeroBit = (binaryString, finalStringLength) => {\n if (binaryString.length > finalStringLength) {\n throw new Error(`Given string is already longer than given final length after padding: ${finalStringLength}`);\n }\n return \"0\".repeat(finalStringLength - binaryString.length).concat(binaryString);\n};\nexports.leftPadWithZeroBit = leftPadWithZeroBit;\n/**\n * Given the prefix portion of a cidr notation and the type of IP number, returns the mask in binary string\n *\n * @param {number} cidrPrefix the prefix part of a cidr notation\n * @param {IPNumType.IPv4 | IPNumType.IPv6} ipType the type of the ip number in the range the cidr represents\n */\nlet cidrPrefixToMaskBinaryString = (cidrPrefix, ipType) => {\n let cidrUpperValue;\n if (ipType == \"IPv4\" /* IPNumType.IPv4 */) {\n cidrUpperValue = 32;\n }\n else {\n cidrUpperValue = 128;\n }\n if (cidrPrefix > cidrUpperValue)\n throw Error(`Value is greater than ${cidrUpperValue}`);\n let onBits = '1'.repeat(cidrPrefix);\n let offBits = '0'.repeat(cidrUpperValue - cidrPrefix);\n return `${onBits}${offBits}`;\n};\nexports.cidrPrefixToMaskBinaryString = cidrPrefixToMaskBinaryString;\n/**\n * Calculates the log, to base 2 of given number.\n *\n * @throws Error if number cannot be converted to log base 2\n * @param givenNumber the number to calculate log base 2\n * @return the log base 2 of given number\n */\nlet intLog2 = (givenNumber) => {\n let result = 0;\n while (givenNumber % 2n === 0n) {\n if (givenNumber === 2n) {\n result++;\n break;\n }\n givenNumber = givenNumber >> 1n;\n if (givenNumber % 2n !== 0n) {\n result = 0;\n break;\n }\n result++;\n }\n if (result == 0) {\n throw new Error(`The value of log2 for ${givenNumber.toString()} is not an integer`);\n }\n return result;\n};\nexports.intLog2 = intLog2;\n/**\n * Starting from the most significant bit (from left) returns the number of first bits from both string that are equal\n * @param firstBinaryString first binary string\n * @param secondBinaryString second binary string\n */\nlet matchingBitCount = (firstBinaryString, secondBinaryString) => {\n let longerString;\n let otherString;\n if (firstBinaryString.length >= secondBinaryString.length) {\n longerString = firstBinaryString;\n otherString = secondBinaryString;\n }\n else {\n longerString = secondBinaryString;\n otherString = firstBinaryString;\n }\n let count = 0;\n for (; count < longerString.length; count++) {\n if (longerString.charAt(count) === otherString.charAt(count)) {\n continue;\n }\n break;\n }\n return count;\n};\nexports.matchingBitCount = matchingBitCount;\n//# sourceMappingURL=BinaryUtils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collapseIPv6Number = exports.expandIPv6Number = void 0;\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst Validator_1 = require(\"./Validator\");\nlet extractPrefix = (ipv6String) => {\n return ipv6String.includes(\"/\") ? `/${ipv6String.split(\"/\")[1]}` : \"\";\n};\nlet expandIPv6Number = (ipv6String) => {\n let expandWithZero = (hexadecimalArray) => {\n let paddedArray = hexadecimalArray.map((hexadecimal) => {\n return (0, BinaryUtils_1.leftPadWithZeroBit)(hexadecimal, 4);\n });\n return paddedArray.join(\":\");\n };\n let expandDoubleColon = (gapCount) => {\n let pads = [];\n for (let count = 0; count < gapCount; count++) {\n pads.push(\"0000\");\n }\n return pads.join(\":\");\n };\n if (/(:){3,}/.test(ipv6String))\n throw \"given IPv6 contains consecutive : more than two\";\n const prefix = extractPrefix(ipv6String);\n if (ipv6String.includes(\"/\")) {\n ipv6String = ipv6String.split(\"/\")[0];\n }\n let isValid = Validator_1.Validator.IPV6_PATTERN.test(ipv6String);\n if (!isValid) {\n throw Error(Validator_1.Validator.invalidIPv6PatternMessage);\n }\n if (ipv6String.includes(\"::\")) {\n let split = ipv6String.split(\"::\");\n let leftPortion = split[0];\n let rightPortion = split[1];\n let leftPortionSplit = leftPortion.split(\":\").filter(hexadecimal => { return hexadecimal !== \"\"; });\n let rightPortionSplit = rightPortion.split(\":\").filter(hexadecimal => { return hexadecimal !== \"\"; });\n let doublePortion = expandDoubleColon(8 - (leftPortionSplit.length + rightPortionSplit.length));\n let leftString = expandWithZero(leftPortionSplit);\n if (leftString !== \"\") {\n leftString += \":\";\n }\n let rightString = expandWithZero(rightPortionSplit);\n if (rightString !== \"\") {\n rightString = \":\" + rightString;\n }\n return `${leftString}${doublePortion}${rightString}${prefix}`;\n }\n else {\n return `${expandWithZero(ipv6String.split(\":\"))}${prefix}`;\n }\n};\nexports.expandIPv6Number = expandIPv6Number;\n// Helper function to shorten hexadecatets\nconst shortenHexadecatet = (hex) => {\n // Input hex is expected to be like \"0000\", \"0DB8\", \"001A\" from expanded form\n const withoutLeadingZero = hex.replace(/^0+/, '');\n // If hex was \"0000\", withoutLeadingZero is \"\", so return \"0\"\n // Otherwise, return the string without leading zeros.\n return withoutLeadingZero === '' ? '0' : withoutLeadingZero;\n};\nlet collapseIPv6Number = (ipv6String) => {\n const originalPrefix = extractPrefix(ipv6String);\n const processedIPv6String = ipv6String.includes(\"/\") ? ipv6String.split(\"/\")[0] : ipv6String;\n let expandedIPv6 = \"\";\n try {\n // Expand to full 8 segments, no prefix internally for processing\n let tempExpanded = (0, exports.expandIPv6Number)(processedIPv6String);\n if (tempExpanded.includes(\"/\")) {\n expandedIPv6 = tempExpanded.split(\"/\")[0];\n }\n else {\n expandedIPv6 = tempExpanded;\n }\n }\n catch (e) {\n // Propagate error if expansion fails (e.g. invalid IPv6 format)\n throw e;\n }\n let hexadecatets = expandedIPv6.split(\":\");\n if (hexadecatets.length !== 8) {\n // This case should ideally be prevented by expandIPv6Number's validation or structure.\n // If expandIPv6Number guarantees 8 segments or throws, this might not be strictly needed.\n // However, as a safeguard:\n throw new Error(`Invalid IPv6 structure after expansion: ${expandedIPv6}. Expected 8 segments.`);\n }\n let zeroSequences = [];\n let currentSequenceStart = -1;\n let currentSequenceLength = 0;\n for (let i = 0; i < 8; i++) {\n // Segments from expandIPv6Number are 4-char 0-padded, e.g., \"0000\"\n if (hexadecatets[i] === \"0000\") {\n if (currentSequenceStart === -1) {\n currentSequenceStart = i;\n }\n currentSequenceLength++;\n }\n else {\n if (currentSequenceLength > 0) {\n zeroSequences.push({ start: currentSequenceStart, length: currentSequenceLength });\n }\n currentSequenceStart = -1;\n currentSequenceLength = 0;\n }\n }\n if (currentSequenceLength > 0) { // Capture any trailing zero sequence\n zeroSequences.push({ start: currentSequenceStart, length: currentSequenceLength });\n }\n if (zeroSequences.length === 0) {\n // No zero segments at all, just shorten each hexadecatet\n return hexadecatets.map(shortenHexadecatet).join(\":\") + originalPrefix;\n }\n // Sort sequences: longest first, then earliest start first\n zeroSequences.sort((a, b) => {\n if (b.length !== a.length) {\n return b.length - a.length;\n }\n return a.start - b.start;\n });\n const bestSequence = zeroSequences[0];\n if (bestSequence.length === 8) { // All 8 segments are zero\n return \"::\" + originalPrefix;\n }\n // RFC 5952: \"The symbol \"::\" MUST NOT be used to shorten just one 16-bit 0 field.\"\n // So, length must be > 1 for \"::\" compression.\n if (bestSequence.length < 2) {\n // No \"::\" compression is applied (e.g. \"1:2:0:4:5:6:7:8\")\n return hexadecatets.map(shortenHexadecatet).join(\":\") + originalPrefix;\n }\n // Apply \"::\" compression using the bestSequence\n let leftPartSegments = hexadecatets.slice(0, bestSequence.start);\n let rightPartSegments = hexadecatets.slice(bestSequence.start + bestSequence.length);\n let leftString = leftPartSegments.map(shortenHexadecatet).join(\":\");\n let rightString = rightPartSegments.map(shortenHexadecatet).join(\":\");\n let finalStr = \"\";\n if (bestSequence.start === 0) { // Compression at the beginning: \"::...\"\n finalStr = \"::\" + rightString;\n }\n else if (bestSequence.start + bestSequence.length === 8) { // Compression at the end: \"...::\"\n // Ensure that if leftString is empty (which shouldn't happen here if start > 0), it's handled.\n // However, if bestSequence.start > 0, leftPartSegments won't be empty unless bestSequence.start is 0.\n finalStr = leftString + \"::\";\n }\n else { // Compression in the middle: \"...::...\"\n finalStr = leftString + \"::\" + rightString;\n }\n return finalStr + originalPrefix;\n};\nexports.collapseIPv6Number = collapseIPv6Number;\n//# sourceMappingURL=IPv6Utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hexadectetNotationToBinaryString = exports.binaryStringToHexadecimalString = exports.colonHexadecimalNotationToBinaryString = exports.hexadecimalStringToHexadecatetString = exports.hexadecimalStringToBinaryString = exports.bigIntToHexadecimalString = void 0;\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\n/**\n * Converts a given bigint number to a hexadecimal string\n * @param num the bigint number\n * @returns {string} the hexadeciaml string\n */\nlet bigIntToHexadecimalString = (num) => {\n return num.toString(16);\n};\nexports.bigIntToHexadecimalString = bigIntToHexadecimalString;\n/**\n * Converts a number in hexadecimal (base 16) to binary string\n * @param {string} hexadecimalString the number in base 16\n * @returns {string} the number converted to base 2\n */\nlet hexadecimalStringToBinaryString = (hexadecimalString) => {\n let inDecimal = BigInt(`0x${hexadecimalString}`);\n return inDecimal.toString(2);\n};\nexports.hexadecimalStringToBinaryString = hexadecimalStringToBinaryString;\n/**\n * Converts a number in hexadecimal (base 16) to binary hexadecatet string.\n * This means the bits in the output cannot be more than 16\n *\n * @param hexadecimalString {string} the number converted to binary hexadecatet string\n */\nlet hexadecimalStringToHexadecatetString = (hexadecimalString) => {\n let binaryString = (0, exports.hexadecimalStringToBinaryString)(hexadecimalString);\n let length = binaryString.length;\n if (length > 16) {\n throw new Error(\"Given decimal in binary contains digits greater than an Hexadecatet\");\n }\n return (0, BinaryUtils_1.leftPadWithZeroBit)(binaryString, 16);\n};\nexports.hexadecimalStringToHexadecatetString = hexadecimalStringToHexadecatetString;\n/**\n * Given an IPv6 number in hexadecimal notated string, e.g 2001:0db8:0000:0000:0000:0000:0000:0000 converts it to\n * binary string\n *\n * @param hexadecimalString IPv6 string\n * @returns {string} the binary value of the given ipv6 number in string\n */\nlet colonHexadecimalNotationToBinaryString = (hexadecimalString) => {\n let expandedIPv6 = (0, IPv6Utils_1.expandIPv6Number)(hexadecimalString);\n let stringHexadecimal = expandedIPv6.split(\":\");\n return stringHexadecimal.reduce((binaryAsString, hexidecimal) => {\n return binaryAsString.concat((0, exports.hexadecimalStringToHexadecatetString)(hexidecimal));\n }, '');\n};\nexports.colonHexadecimalNotationToBinaryString = colonHexadecimalNotationToBinaryString;\n/**\n * Converts number in binary string to hexadecimal string\n * @param {string} num in binary string\n * @returns {string} num in hexadecimal string\n */\nlet binaryStringToHexadecimalString = (num) => {\n // first convert to binary string to decimal (big Integer)\n let inDecimal = BigInt(`0b${num}`);\n return inDecimal.toString(16);\n};\nexports.binaryStringToHexadecimalString = binaryStringToHexadecimalString;\n/**\n * Converts a given IPv6 number expressed in the hexadecimal string notation into a 16 bit binary number in string\n * @param {string} hexadectetString the IPv6 number\n * @returns {string} the IPv6 number converted to binary string\n */\nlet hexadectetNotationToBinaryString = (hexadectetString) => {\n let expand = (0, IPv6Utils_1.expandIPv6Number)(hexadectetString);\n let hexadecimals = expand.split(\":\");\n return hexadecimals.reduce((hexadecimalAsString, hexavalue) => {\n return hexadecimalAsString.concat((0, BinaryUtils_1.leftPadWithZeroBit)((0, exports.hexadecimalStringToBinaryString)(hexavalue), 16));\n }, '');\n};\nexports.hexadectetNotationToBinaryString = hexadectetNotationToBinaryString;\n//# sourceMappingURL=HexadecimalUtils.js.map","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Validator = void 0;\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst BinaryUtils_2 = require(\"./BinaryUtils\");\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst HexadecimalUtils_2 = require(\"./HexadecimalUtils\");\nclass Validator {\n /**\n * Checks if given ipNumber is in between the given lower and upper bound\n *\n * @param ipNumber ipNumber to check\n * @param lowerBound lower bound\n * @param upperBound upper bound\n * @returns {boolean} true if ipNumber is between lower and upper bound\n */\n static isWithinRange(ipNumber, lowerBound, upperBound) {\n return ipNumber >= lowerBound && ipNumber <= upperBound;\n }\n /**\n * Checks if the number given is within the value considered valid for an ASN number\n *\n * @param asnNumber the asn number to validate\n * @returns {[boolean , string]} first value is true if valid ASN, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidAsnNumber(asnNumber) {\n let isValid = this.isWithinRange(asnNumber, 0n, this.THIRTY_TWO_BIT_SIZE);\n return [isValid, isValid ? [] : [Validator.invalidAsnRangeMessage]];\n }\n /**\n * Checks if the given ASN number is a 16bit ASN number\n *\n * @param {bigint} asnNumber to check if 16bit or not\n * @returns {[boolean , string]} first value is true if valid 16bit ASN, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValid16BitAsnNumber(asnNumber) {\n let isValid = Validator.isWithinRange(asnNumber, 0n, Validator.SIXTEEN_BIT_SIZE);\n return [isValid, isValid ? [] : [Validator.invalid16BitAsnRangeMessage]];\n }\n /**\n * Checks if the number given is within the value considered valid for an IPv4 number\n *\n * @param ipv4Number the asn number to validate\n * @returns {[boolean , string]} first value is true if valid IPv4 number, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv4Number(ipv4Number) {\n ipv4Number = typeof ipv4Number === \"bigint\" ? ipv4Number : BigInt(ipv4Number);\n let isValid = this.isWithinRange(ipv4Number, 0n, this.THIRTY_TWO_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv4NumberMessage]];\n }\n /**\n * Checks if the number given is within the value considered valid for an IPv6 number\n *\n * @param ipv6Number the asn number to validate\n * @returns {[boolean , string]} first value is true if valid IPv6 number, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Number(ipv6Number) {\n let isValid = this.isWithinRange(ipv6Number, 0n, this.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv6NumberMessage]];\n }\n /**\n * Checks if the number given is valid for an IPv4 octet\n *\n * @param octetNumber the octet value\n * @returns {boolean} true if valid octet, false otherwise\n */\n static isValidIPv4Octet(octetNumber) {\n let withinRange = this.isWithinRange(octetNumber, 0n, this.EIGHT_BIT_SIZE);\n return [withinRange, withinRange ? [] : [Validator.invalidOctetRangeMessage]];\n }\n /**\n * Checks if the number given is valid for an IPv6 hexadecatet\n *\n * @param {bigint} hexadecatetNum the hexadecatet value\n * @returns {[boolean , string]} first value is true if valid hexadecatet, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Hexadecatet(hexadecatetNum) {\n let isValid = this.isWithinRange(hexadecatetNum, 0n, this.SIXTEEN_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidHexadecatetMessage]];\n }\n /**\n * Checks if given string is a valid IPv4 value.\n *\n * @param {string} ipv4String the IPv4 string to validate\n * @returns {[boolean , string]} result of validation, first value represents if is valid IPv4, second value\n * contains error message if invalid IPv4\n */\n static isValidIPv4String(ipv4String) {\n let rawOctets = ipv4String.split(\".\");\n if (rawOctets.length != 4 || rawOctets.includes('')) {\n return [false, [Validator.invalidOctetCountMessage]];\n }\n let isValid = rawOctets.every(octet => {\n return Validator.isNumeric(octet) ? Validator.isValidIPv4Octet(BigInt(octet))[0] : false;\n });\n if (!isValid) {\n return [false, [Validator.invalidOctetRangeMessage]];\n }\n isValid = Validator.IPV4_PATTERN.test(ipv4String);\n return [isValid, isValid ? [] : [Validator.invalidIPv4PatternMessage]];\n }\n /**\n * Checks if given string is a valid IPv6 value.\n *\n * @param {string} ipv6String the IPv6 string to validate\n * @returns {[boolean , string]} result of validation, first value represents if is valid IPv6, second value\n * contains error message if invalid IPv6\n */\n static isValidIPv6String(ipv6String) {\n try {\n let hexadecimals = (0, IPv6Utils_1.expandIPv6Number)(ipv6String).split(\":\");\n if (hexadecimals.length != 8) {\n return [false, [Validator.invalidHexadecatetCountMessage]];\n }\n let isValid = hexadecimals.every(hexadecimal => {\n return Validator.isHexadecatet(hexadecimal) ?\n Validator.isValidIPv6Hexadecatet(BigInt(`0x${hexadecimal}`))[0] : false;\n });\n if (!isValid) {\n return [false, [Validator.invalidHexadecatetMessage]];\n }\n isValid = Validator.IPV6_PATTERN.test(ipv6String);\n return [isValid, isValid ? [] : [Validator.invalidIPv6PatternMessage]];\n }\n catch (error) {\n return [false, [String(error)]];\n }\n }\n /**\n * Checks if given value is a valid prefix value\n *\n * @param prefixValue value to check\n * @param ipNumType The type of IP number\n * @returns {(boolean|string)[]} a tuple representing if valid or not and corresponding message\n */\n static isValidPrefixValue(prefixValue, ipNumType) {\n if (\"IPv4\" /* IPNumType.IPv4 */ === ipNumType) {\n let withinRange = Validator.isWithinRange(BigInt(prefixValue), 0n, 32n);\n return [withinRange, withinRange ? [] : [Validator.invalidPrefixValueMessage]];\n }\n if (\"IPv6\" /* IPNumType.IPv6 */ === ipNumType) {\n let withinRange = Validator.isWithinRange(BigInt(prefixValue), 0n, 128n);\n return [withinRange, withinRange ? [] : [Validator.invalidPrefixValueMessage]];\n }\n return [false, [Validator.invalidInetNumType]];\n }\n /**\n * Checks if given string is a valid IPv4 mask\n *\n * @param {string} ipv4MaskString the given IPv4 mask string\n * @returns {[boolean , string]} first value is true if valid IPv4 mask string, false otherwise. Second value\n * contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv4Mask(ipv4MaskString) {\n let ipv4InBinary = (0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(ipv4MaskString);\n let isValid = Validator.IPV4_CONTIGUOUS_MASK_BIT_PATTERN.test(ipv4InBinary);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidMaskMessage]];\n }\n /**\n * Checks if given string is a valid IPv6 mask\n *\n * @param {string} ipv6MaskString the given IPv6 mask string\n * @returns {[boolean , string]} first value is true if valid IPv6 mask string, false otherwise. Second value\n * contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Mask(ipv6MaskString) {\n let ipv6InBinary = (0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(ipv6MaskString);\n let isValid = Validator.IPV6_CONTIGUOUS_MASK_BIT_PATTERN.test(ipv6InBinary);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidMaskMessage]];\n }\n /**\n * Checks if the given string is a valid IPv4 range in Cidr notation\n *\n * @param {string} ipv4RangeAsCidrString the IPv4 range in Cidr notation\n *\n * @returns {[boolean , string[]]} first value is true if valid IPv4 range in Cidr notation, false otherwise. Second\n * value contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv4CidrNotation(ipv4RangeAsCidrString) {\n let cidrComponents = ipv4RangeAsCidrString.split(\"/\");\n if (cidrComponents.length !== 2 || (cidrComponents[0].length === 0 || cidrComponents[1].length === 0)) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n let ip = cidrComponents[0];\n let range = cidrComponents[1];\n if (!/^\\d+$/.test(range)) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n if (isNaN(Number(range))) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n let [validIpv4, invalidIpv4Message] = Validator.isValidIPv4String(ip);\n let [validPrefix, invalidPrefixMessage] = Validator.isValidPrefixValue(BigInt(range), \"IPv4\" /* IPNumType.IPv4 */);\n let isValid = validIpv4 && validPrefix;\n let invalidMessage = invalidIpv4Message.concat(invalidPrefixMessage);\n return isValid ? [isValid, []] : [isValid, invalidMessage];\n }\n /**\n * Checks if the given string is a valid IPv4 range in Cidr notation, with the ip number in the cidr notation\n * being the start of the range\n *\n * @param {string} ipv4CidrNotation the IPv4 range in Cidr notation\n *\n * * @returns {[boolean , string[]]} first value is true if valid Cidr notation, false otherwise. Second\n * value contains [] or an array of error message when invalid\n */\n static isValidIPv4CidrRange(ipv4CidrNotation) {\n return Validator.isValidCidrRange(ipv4CidrNotation, Validator.isValidIPv4CidrNotation, BinaryUtils_1.dottedDecimalNotationToBinaryString, (value) => (0, BinaryUtils_2.cidrPrefixToMaskBinaryString)(value, \"IPv4\" /* IPNumType.IPv4 */));\n }\n /**\n * Checks if the given string is a valid IPv6 range in Cidr notation, with the ip number in the cidr notation\n * being the start of the range\n *\n * @param {string} ipv6CidrNotation the IPv6 range in Cidr notation\n *\n * * @returns {[boolean , string[]]} first value is true if valid Cidr notation, false otherwise. Second\n * value contains [] or an array of error message when invalid\n */\n static isValidIPv6CidrRange(ipv6CidrNotation) {\n return Validator.isValidCidrRange(ipv6CidrNotation, Validator.isValidIPv6CidrNotation, HexadecimalUtils_1.colonHexadecimalNotationToBinaryString, (value) => (0, BinaryUtils_2.cidrPrefixToMaskBinaryString)(value, \"IPv6\" /* IPNumType.IPv6 */));\n }\n static isValidCidrRange(rangeString, cidrNotationValidator, toBinaryStringConverter, prefixFactory) {\n let validationResult = cidrNotationValidator(rangeString);\n if (!validationResult[0]) {\n return validationResult;\n }\n let cidrComponents = rangeString.split(\"/\");\n let ip = cidrComponents[0];\n let range = cidrComponents[1];\n let ipNumber = BigInt(`0b${toBinaryStringConverter(ip)}`);\n let mask = BigInt(`0b${prefixFactory(parseInt(range))}`);\n let isValid = (ipNumber & (mask)) === (ipNumber);\n return isValid ? [isValid, []] : [isValid, [Validator.InvalidIPCidrRangeMessage]];\n }\n static isValidIPv4RangeString(ipv4RangeString) {\n let firstLastValidator = (firstIP, lastIP) => BigInt(`0b${(0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(firstIP)}`)\n >= BigInt(`0b${(0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(lastIP)}`);\n return this.isValidRange(ipv4RangeString, Validator.isValidIPv4String, firstLastValidator);\n }\n static isValidIPv6RangeString(ipv6RangeString) {\n let firstLastValidator = (firstIP, lastIP) => BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(firstIP)}`)\n >= BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(lastIP)}`);\n return this.isValidRange(ipv6RangeString, Validator.isValidIPv6String, firstLastValidator);\n }\n static isValidRange(rangeString, validator, firstLastValidator) {\n let rangeComponents = rangeString.split(\"-\").map(component => component.trim());\n if (rangeComponents.length !== 2 || (rangeComponents[0].length === 0 || rangeComponents[1].length === 0)) {\n return [false, [Validator.invalidRangeNotationMessage]];\n }\n let firstIP = rangeComponents[0];\n let lastIP = rangeComponents[1];\n let [validFirstIP, invalidFirstIPMessage] = validator(firstIP);\n let [validLastIP, invalidLastIPMessage] = validator(lastIP);\n let isValid = validFirstIP && validLastIP;\n if (isValid && firstLastValidator(firstIP, lastIP)) {\n return [false, [Validator.invalidRangeFirstNotGreaterThanLastMessage]];\n }\n let invalidMessage = invalidFirstIPMessage.concat(invalidLastIPMessage);\n return isValid ? [isValid, []] : [isValid, invalidMessage];\n }\n /**\n * Checks if the given string is a valid IPv6 range in Cidr notation\n *\n * @param {string} ipv6RangeAsCidrString the IPv6 range in Cidr notation\n *\n * @returns {[boolean , string]} first value is true if valid IPv6 range in Cidr notation, false otherwise.\n * Second value contains \"valid\" or an error message when value is invalid\n */\n // TODO change to be like isValidIPv4CidrNotation where validation is done on the component of the cidr notation\n // instead of a single regex check\n static isValidIPv6CidrNotation(ipv6RangeAsCidrString) {\n let isValid = Validator.IPV6_RANGE_PATTERN.test(ipv6RangeAsCidrString);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv6CidrNotationString]];\n }\n /**\n * Checks if the given string is a binary string. That is contains only contiguous 1s and 0s\n *\n * @param {string} binaryString the binary string\n * @returns {(boolean|string)[]} a tuple representing if valid or not and corresponding message\n */\n static isValidBinaryString(binaryString) {\n if (/^([10])+$/.test(binaryString)) {\n return [true, []];\n }\n else {\n return [false, [Validator.invalidBinaryStringErrorMessage]];\n }\n }\n static isNumeric(value) {\n return /^(\\d+)$/.test(value);\n }\n static isHexadecatet(value) {\n return /^[0-9A-Fa-f]{4}$/.test(value);\n }\n}\nexports.Validator = Validator;\nValidator.IPV4_PATTERN = new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/);\n// source: https://community.helpsystems.com/forums/intermapper/miscellaneous-topics/5acc4fcf-fa83-e511-80cf-0050568460e4\nValidator.IPV6_PATTERN = new RegExp(/^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/);\nValidator.IPV4_RANGE_PATTERN = new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\\/)([1-9]|[1-2][0-9]|3[0-2])$/);\nValidator.IPV6_RANGE_PATTERN = new RegExp(/^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/);\nValidator.IPV4_CONTIGUOUS_MASK_BIT_PATTERN = new RegExp(/^(1){0,32}(0){0,32}$/);\nValidator.IPV6_CONTIGUOUS_MASK_BIT_PATTERN = new RegExp(/^(1){0,128}(0){0,128}$/);\nValidator.EIGHT_BIT_SIZE = BigInt(`0b${\"1\".repeat(8)}`);\nValidator.SIXTEEN_BIT_SIZE = BigInt(`0b${\"1\".repeat(16)}`);\nValidator.THIRTY_TWO_BIT_SIZE = BigInt(`0b${\"1\".repeat(32)}`);\nValidator.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE = BigInt(`0b${\"1\".repeat(128)}`);\nValidator.IPV4_SIZE = BigInt(\"4294967296\");\nValidator.IPV6_SIZE = BigInt(\"340282366920938463463374607431768211456\");\nValidator.invalidAsnRangeMessage = \"ASN number given less than zero or is greater than 32bit\";\nValidator.invalid16BitAsnRangeMessage = \"ASN number given less than zero or is greater than 16bit\";\nValidator.invalidIPv4NumberMessage = \"IPv4 number given less than zero or is greater than 32bit\";\nValidator.invalidIPv6NumberMessage = \"IPv6 number given less than zero or is greater than 128bit\";\nValidator.invalidOctetRangeMessage = \"Value given contains an invalid Octet; Value is less than zero or is greater than 8bit\";\nValidator.invalidHexadecatetMessage = \"The value given is less than zero or is greater than 16bit\";\nValidator.invalidOctetCountMessage = \"An IP4 number cannot have less or greater than 4 octets\";\nValidator.invalidHexadecatetCountMessage = \"An IP6 number must have exactly 8 hexadecatet\";\nValidator.invalidMaskMessage = \"The Mask is invalid\";\nValidator.invalidPrefixValueMessage = \"A Prefix value cannot be less than 0 or greater than 32\";\nValidator.invalidIPv4CidrNotationMessage = \"Cidr notation should be in the form [ip number]/[range]\";\nValidator.InvalidIPCidrRangeMessage = \"Given IP number portion must is not the start of the range\";\nValidator.invalidRangeNotationMessage = \"Range notation should be in the form [first ip]-[last ip]\";\nValidator.invalidRangeFirstNotGreaterThanLastMessage = \"First IP in [first ip]-[last ip] must be less than Last IP\";\nValidator.invalidIPv6CidrNotationString = \"A Cidr notation string should contain an IPv6 number and prefix\";\nValidator.takeOutOfRangeSizeMessage = \"$count is greater than $size, the size of the range\";\nValidator.cannotSplitSingleRangeErrorMessage = \"Cannot split an IP range with a single IP number\";\nValidator.invalidInetNumType = \"Given ipNumType must be either InetNumType.IPv4 or InetNumType.IPv6\";\nValidator.invalidBinaryStringErrorMessage = \"Binary string should contain only contiguous 1s and 0s\";\nValidator.invalidIPRangeSizeMessage = \"Given size is zero or greater than maximum size of $iptype\";\nValidator.invalidIPRangeSizeForCidrMessage = \"Given size can't be created via cidr prefix\";\nValidator.invalidIPv4PatternMessage = \"Given IPv4 is not confirm to a valid IPv6 address\";\nValidator.invalidIPv6PatternMessage = \"Given IPv6 is not confirm to a valid IPv6 address\";\n//# sourceMappingURL=Validator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hexadecatet = void 0;\nconst Validator_1 = require(\"./Validator\");\n/**\n * A representation of a 4-digit hexadecimal number.\n *\n * It consists of four (base 16) number. ie FFFF\n *\n * It is used to represents the components of an IPv6 address\n */\nclass Hexadecatet {\n /**\n * A convenience method for constructing an instance of {@link Hexadecatet} from a four (base 16) number\n * representation of a 16bit value.\n *\n * @param {string} rawValue the four (base 16) number\n * @returns {Hexadecatet} an instance of {@link Hexadecatet}\n */\n static fromString(rawValue) {\n return new Hexadecatet(rawValue);\n }\n ;\n /**\n * A convenience method for constructing an instance of {@link Hexadecatet} from a decimal number representation\n * of a 16 bit value\n *\n * @param {number} rawValue decimal number representation of a 16 bit value\n * @returns {Hexadecatet} an instance of {@link Hexadecatet}\n */\n static fromNumber(rawValue) {\n return new Hexadecatet(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of {@link Hexadecatet}\n *\n * @param {string | number} givenValue a string or numeric value. If given value is a string then it should be a\n * four (base 16) number representation of a 16bit value. If it is a number, then it should be a decimal number\n * representation of a 16 bit value\n */\n constructor(givenValue) {\n let hexadecatetValue;\n if (typeof givenValue === 'string') {\n hexadecatetValue = parseInt(givenValue, 16);\n }\n else {\n hexadecatetValue = parseInt(String(givenValue), 16);\n }\n let [isValid, message] = Validator_1.Validator.isValidIPv6Hexadecatet(BigInt(hexadecatetValue));\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = hexadecatetValue;\n }\n /**\n * Returns the numeric value in base 10 (ie decimal)\n *\n * @returns {number} the numeric value in base 10 (ie decimal)\n */\n getValue() {\n return this.value;\n }\n /**\n * Returns the string representation of the base 16 representation of the value\n * @returns {string} the string representation of the base 16 representation of the value\n */\n // TODO pad with a zero if digit is less than 4\n toString() {\n return this.value.toString(16);\n }\n}\nexports.Hexadecatet = Hexadecatet;\n//# sourceMappingURL=Hexadecatet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Octet = void 0;\nconst Validator_1 = require(\"./Validator\");\n/**\n * A binary representation of a 8 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Octet_(computing)} for more information on Octets\n *\n * An octet is used in the textual representation of an {@link IPv4} number, where the IP number value is divided\n * into 4 octets\n */\nclass Octet {\n /**\n * Convenience method for creating an Octet out of a string value representing the value of the octet\n *\n * @param {string} rawValue the octet value in string\n * @returns {Octet} the Octet instance\n */\n static fromString(rawValue) {\n return new Octet(rawValue);\n }\n ;\n /**\n * Convenience method for creating an Octet out of a numeric value representing the value of the octet\n *\n * @param {number} rawValue the octet value in number\n * @returns {Octet} the Octet instance\n */\n static fromNumber(rawValue) {\n return new Octet(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of an Octet.\n *\n * The constructor parameter given could either be a string or number.\n *\n * If a string, it is the string representation of the numeric value of the octet\n * If a number, it is the numeric representation of the value of the octet\n *\n * @param {string | number} givenValue value of the octet to be created.\n */\n constructor(givenValue) {\n let octetValue;\n if (typeof givenValue === 'string') {\n octetValue = parseInt(givenValue);\n }\n else {\n octetValue = givenValue;\n }\n let [isValid, message] = Validator_1.Validator.isValidIPv4Octet(BigInt(octetValue));\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = octetValue;\n }\n /**\n * Method to get the numeric value of the octet\n *\n * @returns {number} the numeric value of the octet\n */\n getValue() {\n return this.value;\n }\n /**\n * Returns a decimal representation of the value of the octet in string\n *\n * @returns {string} a decimal representation of the value of the octet in string\n */\n toString() {\n return this.value.toString(10);\n }\n}\nexports.Octet = Octet;\n//# sourceMappingURL=Octet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPv6Mask = exports.IPv4Mask = exports.IPv6 = exports.Asn = exports.IPv4 = exports.AbstractIPNum = void 0;\nexports.isIPv4 = isIPv4;\nconst Octet_1 = require(\"./Octet\");\nconst Validator_1 = require(\"./Validator\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst BinaryUtils_2 = require(\"./BinaryUtils\");\nconst BinaryUtils_3 = require(\"./BinaryUtils\");\nconst BinaryUtils_4 = require(\"./BinaryUtils\");\nconst Hexadecatet_1 = require(\"./Hexadecatet\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst HexadecimalUtils_2 = require(\"./HexadecimalUtils\");\n/**\n * Provides the implementation of functionality that are common\n * to {@link IPv4}, {@link IPv6}, {@link IPv4Mask} and {@link IPv6Mask}\n */\nclass AbstractIPNum {\n /**\n * Gets the numeric value of an IP number as {@link BigInt}\n *\n * @returns bigInt the numeric value of an IP number.\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the binary string representation of an IP number.\n *\n * @returns {string} the string binary representation.\n */\n toBinaryString() {\n return (0, BinaryUtils_3.leftPadWithZeroBit)(this.value.toString(2), this.bitSize);\n }\n /**\n * Checks if an IP number has a value greater than the present value\n * @returns {boolean} true, if there is a value greater than the present value. Returns false otherwise.\n */\n hasNext() {\n return this.value < this.maximumBitSize;\n }\n /**\n * Checks if an IP number has a value lesser than the present value\n * @returns {boolean} true, if there is a value lesser than the present value. Returns false otherwise.\n */\n hasPrevious() {\n return this.value > 0n;\n }\n /**\n * Checks if the given IP number, is equals to the current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is equals\n */\n isEquals(anotherIPNum) {\n return this.value === anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is lesser than this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is less than this current one. False otherwise.\n */\n isLessThan(anotherIPNum) {\n return this.value < anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is greater than this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is greater than this current one. False otherwise.\n */\n isGreaterThan(anotherIPNum) {\n return this.value > anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is less than or equals to this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is less than or equals to this current one. False otherwise.\n */\n isLessThanOrEquals(anotherIPNum) {\n return this.value <= anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is greater than or equals to this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} {boolean} true if the given IP number is greater than or equals to this current one. False\n * otherwise.\n */\n isGreaterThanOrEquals(anotherIPNum) {\n return this.value >= anotherIPNum.value;\n }\n}\nexports.AbstractIPNum = AbstractIPNum;\n/**\n * Represents an IPv4 number. A 32 bit number that is used to uniquely identify a device that is part of a computer\n * network that uses the internet protocol for communication.\n *\n * @see https://en.wikipedia.org/wiki/IPv4\n * @see https://www.rfc-editor.org/info/rfc791\n */\nclass IPv4 extends AbstractIPNum {\n /**\n * A convenience method for creating an {@link IPv4} by providing the decimal value of the IP number in BigInt\n *\n * @param {bigint} bigIntValue the decimal value of the IP number in BigInt\n * @returns {IPv4} the IPv4 instance\n */\n static fromNumber(bigIntValue) {\n return new IPv4(bigIntValue);\n }\n /**\n * A convenience method for creating an {@link IPv4} by providing the IP number in dot-decimal notation. E.g\n * \"10.1.1.10\"\n *\n * {@see https://en.wikipedia.org/wiki/Dot-decimal_notation} for more information on dot-decimal notation.\n *\n * @param {string} ipString the IP number in dot-decimal notation\n * @returns {IPv4} the IPv4 instance\n */\n static fromDecimalDottedString(ipString) {\n return new IPv4(ipString);\n }\n /**\n * Alias for IPv4.fromDecimalDottedString.\n *\n * @param {string} ipString the IP number in dot-decimal notation\n * @returns {IPv4} the IPv4 instance\n */\n static fromString(ipString) {\n return IPv4.fromDecimalDottedString(ipString);\n }\n /**\n * A convenience method for creating an {@link IPv4} from binary string\n *\n * @param {string} ipBinaryString the binary string representing the IPv4 number to be created\n * @returns {IPv4} the IPv4 instance\n */\n static fromBinaryString(ipBinaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(ipBinaryString);\n if (validationResult[0]) {\n return new IPv4((0, BinaryUtils_2.parseBinaryStringToBigInt)(ipBinaryString));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * Constructor for an IPv4 number.\n *\n * @param {string | bigint} ipValue value to construct an IPv4 from. The given value can either be\n * numeric or string. If a string is given then it needs to be in dot-decimal notation\n */\n constructor(ipValue) {\n super();\n /**\n * The number of bits needed to represents the value of the IPv4 number\n */\n this.bitSize = 32;\n /**\n * The maximum bit size (i.e. binary value) of the IPv4 number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.THIRTY_TWO_BIT_SIZE;\n /**\n * The type of IP number. Value is one of the values of the {@link IPNumType} enum\n * @type {IPNumType} the type of IP number\n */\n this.type = \"IPv4\" /* IPNumType.IPv4 */;\n /**\n * An array of {@link Octet}'s\n *\n * @type {Array} the octets that makes up the IPv4 number\n */\n this.octets = [];\n /**\n * The string character used to separate the individual octets when the IPv4 is rendered as strings\n *\n * @type {string} The string character used to separate the individual octets when rendered as strings\n */\n this.separator = \".\";\n if (typeof ipValue === \"string\") {\n let [value, octets] = this.constructFromDecimalDottedString(ipValue);\n this.value = value;\n this.octets = octets;\n }\n else {\n let [value, octets] = this.constructFromBigIntValue(ipValue);\n this.value = value;\n this.octets = octets;\n }\n }\n /**\n * A string representation of the IPv4 number. The string representation is in dot-decimal notation\n *\n * @returns {string} The string representation in dot-decimal notation\n */\n toString() {\n return this.octets.map((value) => { return value.toString(); }).join(this.separator);\n }\n /**\n * Gets the individual {@link Octet} that makes up the IPv4 number\n *\n * @returns {Array<Octet>} The individual {@link Octet} that makes up the IPv4 number\n */\n getOctets() {\n return this.octets;\n }\n /**\n * Returns the next IPv4 number\n *\n * @returns {IPv4} the next IPv4 number\n */\n nextIPNumber() {\n return IPv4.fromNumber(this.getValue() + 1n);\n }\n /**\n * Returns the previous IPv4 number\n *\n * @returns {IPv4} the previous IPv4 number\n */\n previousIPNumber() {\n return IPv4.fromNumber(this.getValue() - 1n);\n }\n /**\n * Returns this IPv4 number as a IPv4-Mapped IPv6 Address\n *\n * The IPv4-Mapped IPv6 Address allows an IPv4 number to be embedded within an IPv6 number\n *\n * {@see https://tools.ietf.org/html/rfc4291#section-2.5.5} for more information on the IPv4-Mapped IPv6 Address\n *\n * @returns {IPv6} an IPv6 number with the IPv4 embedded within it\n */\n toIPv4MappedIPv6() {\n let binary = '1'.repeat(16) + this.toBinaryString();\n return IPv6.fromBinaryString(binary);\n }\n constructFromDecimalDottedString(ipString) {\n let octets;\n let value;\n let [isValid, message] = Validator_1.Validator.isValidIPv4String(ipString);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringOctets = ipString.split(\".\");\n octets = stringOctets.map((rawOctet) => {\n return Octet_1.Octet.fromString(rawOctet);\n });\n value = BigInt(`0b${(0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(ipString)}`);\n return [value, octets];\n }\n constructFromBigIntValue(ipv4Number) {\n let [isValid, message] = Validator_1.Validator.isValidIPv4Number(ipv4Number);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let binaryString = (0, BinaryUtils_4.numberToBinaryString)(ipv4Number);\n ipv4Number = typeof ipv4Number === \"bigint\" ? ipv4Number : BigInt(ipv4Number);\n return [ipv4Number, this.binaryStringToDecimalOctets(binaryString)];\n }\n binaryStringToDecimalOctets(ipv4BinaryString) {\n if (ipv4BinaryString.length < 32) {\n ipv4BinaryString = (0, BinaryUtils_3.leftPadWithZeroBit)(ipv4BinaryString, 32);\n }\n let octets = ipv4BinaryString.match(/.{1,8}/g);\n return octets.map((octet) => {\n return Octet_1.Octet.fromString((0, BinaryUtils_2.parseBinaryStringToBigInt)(octet).toString());\n });\n }\n}\nexports.IPv4 = IPv4;\n/**\n * Represents an Autonomous System Number. Which is a number that is used to identify\n * a group of IP addresses with a common, clearly defined routing policy.\n *\n * @see https://en.wikipedia.org/wiki/Autonomous_system_(Internet)\n * @see https://tools.ietf.org/html/rfc5396\n */\nclass Asn extends AbstractIPNum {\n /**\n * A convenience method for creating an instance of {@link Asn} from a string\n *\n * The given string can be in asplain, asdot or asdot+ representation format.\n * {@see https://tools.ietf.org/html/rfc5396} for more information on\n * the different ASN string representation\n *\n * @param {string} rawValue the asn string. In either asplain, asdot or asdot+ format\n * @returns {Asn} the constructed ASN instance\n */\n static fromString(rawValue) {\n return new Asn(rawValue);\n }\n ;\n /**\n * A convenience method for creating an instance of {@link Asn} from a numeric value\n *\n * @param {number} rawValue the asn numeric value\n * @returns {Asn} the constructed ASN instance\n */\n static fromNumber(rawValue) {\n return new Asn(rawValue);\n }\n ;\n /**\n * A convenience method for creating an instance of {@link Asn} from a binary string\n *\n * @param {string} binaryString to create an ASN instance from\n * @returns {Asn} the constructed ASN instance\n */\n static fromBinaryString(binaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(binaryString);\n if (validationResult[0]) {\n return new Asn(parseInt(binaryString, 2));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * Constructor for an instance of {@link ASN}\n *\n * @param {string | number} rawValue value to construct an ASN from. The given value can either be numeric or\n * string. If in string then it can be in asplain, asdot or asdot+ string representation format\n */\n constructor(rawValue) {\n super();\n /**\n * The number of bits needed to represents the value of the ASN number\n */\n this.bitSize = 32;\n /**\n * The maximum bit size (i.e. binary value) of the ASN number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.THIRTY_TWO_BIT_SIZE;\n this.type = \"ASN\" /* IPNumType.ASN */;\n if (typeof rawValue === 'string') {\n if (Asn.startWithASPrefix(rawValue)) {\n this.value = BigInt(parseInt(rawValue.substring(2)));\n }\n else if (rawValue.indexOf(\".\") != -1) {\n this.value = BigInt(this.parseFromDotNotation(rawValue));\n }\n else {\n this.value = BigInt(parseInt(rawValue));\n }\n }\n else {\n let valueAsBigInt = BigInt(rawValue);\n let [isValid, message] = Validator_1.Validator.isValidAsnNumber(valueAsBigInt);\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = valueAsBigInt;\n }\n }\n /**\n * A string representation where the asn value is prefixed by \"ASN\". For example \"AS65526\"\n *\n * @returns {string} A string representation where the asn value is prefixed by \"ASN\"\n */\n toString() {\n let stringValue = this.value.toString();\n return `${Asn.AS_PREFIX}${stringValue}`;\n }\n /**\n * A string representation where the ASN numeric value of is represented as a string. For example \"65526\"\n *\n * @returns {string} A string representation where the ASN numeric value of is represented as a string\n */\n toASPlain() {\n return this.value.toString();\n }\n /**\n * A string representation where the ASN value is represented using the asplain notation if the ASN value is\n * less than 65536 and uses asdot+ notation when the value is greater than 65536.\n *\n * For example 65526 will be represented as \"65526\" while 65546 will be represented as \"1.10\"\n *\n *\n * @returns {string} A string representation of the ASN in either asplain or asdot+ notation depending on\n * whether the numeric value of the ASN number is greater than 65526 or not.\n */\n toASDot() {\n if (this.value.valueOf() >= 65536n) {\n return this.toASDotPlus();\n }\n return this.toASPlain();\n }\n /**\n * A string representation where the ASN value is represented using the asdot+ notation\n *\n * @returns {string} A string representation where the ASN value is represented using the asdot+ notation\n *\n */\n toASDotPlus() {\n let high = this.value.valueOf() / 65535n;\n let low = (this.value.valueOf() % 65535n) - high;\n return `${high}.${low}`;\n }\n /**\n * Converts the ASN value to binary numbers represented with strings\n *\n * @returns {string} a binary string representation of the value of the ASN number\n */\n toBinaryString() {\n return (0, BinaryUtils_4.numberToBinaryString)(this.value);\n }\n /**\n * Checks if the ASN value is 16bit\n *\n * @returns {boolean} true if the ASN is a 16bit value. False otherwise.\n */\n is16Bit() {\n let [valid16BitAsnNumber,] = Validator_1.Validator.isValid16BitAsnNumber(this.value);\n return valid16BitAsnNumber;\n }\n /**\n * Checks if the ASN value is 32bit\n *\n * @returns {boolean} true if the ASN is a 32bit value. False otherwise.\n */\n is32Bit() {\n return !this.is16Bit();\n }\n /**\n * Returns the next ASN number\n *\n * @returns {AbstractIPNum} the next ASN number\n */\n nextIPNumber() {\n return new Asn(this.value.valueOf() + 1n);\n }\n /**\n * Returns the previous ASN number\n *\n * @returns {AbstractIPNum} the previous ASN number\n */\n previousIPNumber() {\n return new Asn(this.value.valueOf() - 1n);\n }\n static startWithASPrefix(word) {\n return word.indexOf(Asn.AS_PREFIX) === 0;\n }\n parseFromDotNotation(rawValue) {\n let values = rawValue.split(\".\");\n let high = parseInt(values[0]);\n let low = parseInt(values[1]);\n return (high * 65535) + (low + high);\n }\n}\nexports.Asn = Asn;\nAsn.AS_PREFIX = \"AS\";\n/**\n * Represents an IPv6 number. A 128 bit number that is used to uniquely identify a device that is part of a computer\n * network that uses the internet protocol for communication.\n *\n * @see https://en.wikipedia.org/wiki/IPv6\n * @see https://www.rfc-editor.org/info/rfc8200\n */\nclass IPv6 extends AbstractIPNum {\n /**\n * A convenience method for creating an {@link IPv6} by providing the decimal value of the IP number in BigInt\n *\n * @param {bigint} bigIntValue the decimal value of the IP number in BigInt\n * @returns {IPv6} the IPv6 instance\n */\n static fromBigInt(bigIntValue) {\n return new IPv6(bigIntValue);\n }\n /**\n * A convenience method for creating an {@link IPv6} by providing the IP number in hexadecatet notation. E.g\n * \"2001:800:0:0:0:0:0:2002\"\n *\n * {@see https://en.wikipedia.org/wiki/IPv6_address#Representation} for more information on hexadecatet notation.\n *\n * @param {string} ipString the IP number in hexadecatet\n * @returns {IPv6} the IPv6 instance\n */\n static fromHexadecatet(ipString) {\n return new IPv6(ipString);\n }\n /**\n * Alias for IPv6.fromHexadecimalString\n *\n * @param {string} ipString the IP number in hexadecatet\n * @returns {IPv6} the IPv6 instance\n */\n static fromString(ipString) {\n return IPv6.fromHexadecatet(ipString);\n }\n /**\n * A convenience method for creating an {@link IPv6} from binary string\n *\n * @param {string} ipBinaryString the binary string representing the IPv6 number to be created\n * @returns {IPv6} the IPv6 instance\n */\n static fromBinaryString(ipBinaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(ipBinaryString);\n if (validationResult[0]) {\n let paddedBinaryString = (0, BinaryUtils_3.leftPadWithZeroBit)(ipBinaryString, 128);\n return new IPv6((0, BinaryUtils_2.parseBinaryStringToBigInt)(paddedBinaryString));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * A convenience method for creating an IPv4-Compatible {@link IPv6} Address from an instance of {@link IPv4}\n *\n * @param {IPv4} ipv4 to create an IPv4-Compatible {@link IPv6} Address\n * @returns {IPv6} the IPv4-Compatible {@link IPv6} Address\n */\n static fromIPv4(ipv4) {\n return ipv4.toIPv4MappedIPv6();\n }\n /**\n * A convenience method for creating an IPv4-Compatible {@link IPv6} Address from a IPv4 represented in\n * dot-decimal notation i.e. 127.0.0.1\n *\n * @param {IPv4} ip4DotDecimalString string represented in a dot decimal string\n * @returns {IPv6} the IPv4-Compatible {@link IPv6} Address\n */\n static fromIPv4DotDecimalString(ip4DotDecimalString) {\n return new IPv4(ip4DotDecimalString).toIPv4MappedIPv6();\n }\n /**\n * Constructor for an IPv6 number.\n *\n * @param {string | bigint} ipValue value to construct an IPv6 from. The given value can either be\n * numeric or string. If a string is given then it needs to be in hexadecatet string notation\n */\n constructor(ipValue) {\n super();\n /**\n * The number of bits needed to represents the value of the IPv6 number\n */\n this.bitSize = 128;\n /**\n * The maximum bit size (i.e. binary value) of the IPv6 number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE;\n /**\n * The type of IP number. Value is one of the values of the {@link IPNumType} enum\n * @type {IPNumType} the type of IP number\n */\n this.type = \"IPv6\" /* IPNumType.IPv6 */;\n /**\n * An array of {@link Hexadecatet}'s\n *\n * @type {Array} the hexadecatet that makes up the IPv6 number\n */\n this.hexadecatet = [];\n /**\n * The string character used to separate the individual hexadecatet when the IPv6 is rendered as strings\n *\n * @type {string} The string character used to separate the individual hexadecatet when rendered as strings\n */\n this.separator = \":\";\n if (typeof ipValue === \"string\") {\n let expandedIPv6 = (0, IPv6Utils_1.expandIPv6Number)(ipValue);\n let [value, hexadecatet] = this.constructFromHexadecimalDottedString(expandedIPv6);\n this.value = value;\n this.hexadecatet = hexadecatet;\n }\n else {\n let [value, hexadecatet] = this.constructFromBigIntValue(ipValue);\n this.value = value;\n this.hexadecatet = hexadecatet;\n }\n }\n /**\n * A string representation of the IPv6 number.\n *\n * @returns {string} The string representation of IPv6\n */\n toString() {\n let ipv6String = this.hexadecatet.map((value) => { return value.toString(); }).join(\":\");\n if (this.hexadecatet.length < 8) {\n return \"::\" + ipv6String;\n }\n else {\n return ipv6String;\n }\n }\n /**\n * Gets the individual {@link Hexadecatet} that makes up the IPv6 number\n *\n * @returns {Array<Hexadecatet>} The individual {@link Hexadecatet} that makes up the IPv6 number\n */\n //TODO maybe rename to something like getSegments? so it can be same with getOctet\n getHexadecatet() {\n return this.hexadecatet;\n }\n /**\n * Returns the next IPv6 number\n *\n * @returns {IPv6} the next IPv6 number\n */\n nextIPNumber() {\n return IPv6.fromBigInt(this.getValue() + 1n);\n }\n /**\n * Returns the previous IPv6 number\n *\n * @returns {IPv6} the previous IPv6 number\n */\n previousIPNumber() {\n return IPv6.fromBigInt(this.getValue() - 1n);\n }\n constructFromBigIntValue(ipv6Number) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6Number(ipv6Number);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let binaryString = (0, BinaryUtils_4.numberToBinaryString)(ipv6Number);\n return [ipv6Number, this.binaryStringToHexadecatets(binaryString)];\n }\n constructFromHexadecimalDottedString(expandedIPv6) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6String(expandedIPv6);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringHexadecimals = expandedIPv6.split(\":\");\n let hexadecatet = stringHexadecimals.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n let value = BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(expandedIPv6)}`);\n return [value, hexadecatet];\n }\n binaryStringToHexadecatets(binaryString) {\n let hexadecimalString = (0, HexadecimalUtils_1.binaryStringToHexadecimalString)(binaryString);\n while (hexadecimalString.length % 4 != 0) {\n hexadecimalString = '0' + hexadecimalString;\n }\n let hexadecimalStrings = hexadecimalString.match(/.{1,4}/g);\n return hexadecimalStrings.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n }\n}\nexports.IPv6 = IPv6;\n/**\n * The IPv4Mask can be seen as a specialized IPv4 number where, in a 32 bit number, starting from the left, you\n * have continuous bits turned on (with 1 value) followed by bits turned off (with 0 value). In networking, it is used\n * to demarcate which bits are used to identify a network, and the ones that are used to identify hosts on the network\n */\nclass IPv4Mask extends IPv4 {\n /**\n * A convenience method for creating an instance of IPv4Mask. The passed strings need to be a valid IPv4\n * number in dot-decimal notation.\n *\n * @param {string} rawValue The passed string in dot-decimal notation\n * @returns {IPv4Mask} the instance of IPv4Mask\n */\n static fromDecimalDottedString(rawValue) {\n return new IPv4Mask(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of IPv4Mask.\n * The passed strings need to be a valid IPv4 mask number in dot-decimal notation.\n *\n * @param {string} ipString The passed string in dot-decimal notation\n */\n constructor(ipString) {\n super(ipString);\n /**\n * An array of {@link Octet}'s\n *\n * @type {Array} the octets that makes up the IPv4Mask\n */\n this.octets = [];\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidIPv4Mask(ipString);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringOctets = ipString.split(\".\");\n this.octets = stringOctets.map((rawOctet) => {\n return Octet_1.Octet.fromString(rawOctet);\n });\n let binaryString = (0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(ipString);\n this.prefix = (binaryString.match(/1/g) || []).length;\n this.value = BigInt(`0b${binaryString}`);\n }\n}\nexports.IPv4Mask = IPv4Mask;\n/**\n * The IPv6Mask can be seen as a specialized IPv4 number where, in a 128 bit number, starting from the left,\n * you have continuous bits turned on (with 1 value) followed by bits turned off (with 0 value). In networking, it\n * is used to demarcate which bits are used to identify a network, and the ones that are used to identify hosts\n * on the network\n */\nclass IPv6Mask extends IPv6 {\n /**\n * A convenience method for creating an instance of IPv6Mask.\n * The passed strings need to be a valid IPv4 mask number in dot-decimal notation.\n *\n * @param {string} rawValue The passed string in textual notation\n * @returns {IPv6Mask} the instance of IPv6Mask\n */\n static fromHexadecatet(rawValue) {\n return new IPv6Mask(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of IPv6Mask.\n * The passed strings need to be a valid IPv6 mask number in dot-decimal notation\n *\n * @param {string} ipString The passed IPv6 string\n */\n constructor(ipString) {\n super(ipString);\n /**\n * An array of {@link Hexadecatet}'s\n *\n * @type {Array} the hexadecatet that makes up the IPv6 number\n */\n this.hexadecatet = [];\n let isValid;\n let message;\n let expandedIPv6 = (0, IPv6Utils_1.expandIPv6Number)(ipString);\n [isValid, message] = Validator_1.Validator.isValidIPv6Mask(expandedIPv6);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringHexadecimals = expandedIPv6.split(\":\");\n this.hexadecatet = stringHexadecimals.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n let binaryString = (0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(expandedIPv6);\n this.prefix = (binaryString.match(/1/g) || []).length;\n this.value = BigInt(`0b${binaryString}`);\n this.value = BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(expandedIPv6)}`);\n }\n}\nexports.IPv6Mask = IPv6Mask;\n/**\n * Check is the given IP number is an {@link IPv4} or not\n * @param ip the IP number to check if it is IPv4.\n */\nfunction isIPv4(ip) {\n return ip.bitSize === 32;\n}\n//# sourceMappingURL=IPNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=IPNumType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPv6Prefix = exports.IPv4Prefix = void 0;\nexports.isIPv4Prefix = isIPv4Prefix;\nconst Validator_1 = require(\"./Validator\");\nconst IPNumber_1 = require(\"./IPNumber\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst Hexadecatet_1 = require(\"./Hexadecatet\");\n/**\n * Represents the prefix portion in the CIDR notation for representing IP ranges\n *\n * The IPv4 prefix portion represents the mask. It is the number of continuous bits turned on (with value 1)\n * counting from the left side of an 8 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing} for more information on CIDR\n */\nclass IPv4Prefix {\n /**\n * Convenience method for constructing an instance of IPv4 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv4 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv4 prefix\n */\n static fromNumber(rawValue) {\n return new IPv4Prefix(rawValue);\n }\n ;\n static fromRangeSize(rangeSize) {\n let prefixNumber = rangeSize === (1n) ? 32 : 32 - rangeSizeToPrefix(rangeSize, Validator_1.Validator.IPV4_SIZE);\n return IPv4Prefix.fromNumber(BigInt(prefixNumber));\n }\n ;\n /**\n * Constructor for an instance of IPv4 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv4 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv4 prefix\n */\n constructor(rawValue) {\n this.type = \"IPv4\";\n this.bitValue = 32n;\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidPrefixValue(rawValue, \"IPv4\" /* IPNumType.IPv4 */);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = rawValue;\n }\n /**\n * Gets the decimal value of the IPv4 prefix\n *\n * @returns {number} the decimal value of the IPv4 prefix\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the decimal value of the IPv4 prefix as string\n * @returns {string} The decimal value of the IPv4 prefix as string\n */\n toString() {\n return this.value.toString();\n }\n /**\n * Converts the IPv4 prefix to a {@link IPv4Mask}\n *\n * The IPv4 mask is the representation of the prefix in the dot-decimal notation\n *\n * @returns {IPv4Mask} the mask representation of the prefix\n */\n toMask() {\n let onBits = '1'.repeat(Number(this.value));\n let offBits = '0'.repeat(Number(32n - this.value));\n return IPNumber_1.IPv4Mask.fromDecimalDottedString(this.toDecimalNotation(`${onBits}${offBits}`));\n }\n /**\n * Returns the size (number of IP numbers) of range of this prefix\n *\n * @return {bigint} the size (number of IP numbers) of range of this prefix\n */\n toRangeSize() {\n /**\n * Using bitwise shift operation this will be\n * 1 << (this.bitValue - this.getValue())\n * Since left shift a number by x is equivalent to multiplying the number by the power x raised to 2\n * 2 << 4 = 2 * (2 raised to 4)\n */\n return 1n << (this.bitValue - this.getValue());\n }\n /**\n * Returns a prefix for when this prefix is merged\n * with another prefix of the same size\n */\n merge() {\n return new IPv4Prefix(this.value - 1n);\n }\n /**\n * Returns a prefix for when this prefix is split\n * into two equal halves\n */\n split() {\n return new IPv4Prefix(this.value + 1n);\n }\n toDecimalNotation(bits) {\n return `${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(0, 8))}.${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(8, 8))}.${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(16, 8))}.${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(24, 8))}`;\n }\n}\nexports.IPv4Prefix = IPv4Prefix;\n/**\n * Represents the prefix portion in the CIDR notation for representing IP ranges\n *\n * The IPv6 prefix portion represents the mask. It is the number of continuous bits turned on (with value 1)\n * counting from the left side of an 128 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing} for more information on CIDR\n */\nclass IPv6Prefix {\n /**\n * Convenience method for constructing an instance of IPv46 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv6 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv6 prefix\n */\n static fromNumber(rawValue) {\n return new IPv6Prefix(rawValue);\n }\n ;\n static fromRangeSize(rangeSize) {\n let prefixNumber = rangeSize === (1n) ? 128 : 128 - rangeSizeToPrefix(rangeSize, Validator_1.Validator.IPV6_SIZE);\n return IPv6Prefix.fromNumber(BigInt(prefixNumber));\n }\n /**\n * Constructor for an instance of IPv6 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv6 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv6 prefix\n */\n constructor(rawValue) {\n this.type = \"IPv6\";\n this.bitValue = 128n;\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidPrefixValue(rawValue, \"IPv6\" /* IPNumType.IPv6 */);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = rawValue;\n }\n /**\n * Gets the decimal value of the IPv6 prefix\n *\n * @returns {number} the decimal value of the IPv6 prefix\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the decimal value of the IPv4 prefix as string\n * @returns {string} he decimal value of the IPv4 prefix as string\n */\n toString() {\n return this.value.toString();\n }\n /**\n * Converts the IPv6 prefix to a {@link IPv6Mask}\n *\n * The IPv6 mask is the representation of the prefix in 8 groups of 16 bit values represented in hexadecimal\n *\n * @returns {IPv6Mask} the mask representation of the prefix\n */\n toMask() {\n let onBits = '1'.repeat(Number(this.value));\n let offBits = '0'.repeat(128 - Number(this.value));\n return IPNumber_1.IPv6Mask.fromHexadecatet(this.toHexadecatetNotation(`${onBits}${offBits}`));\n }\n /**\n * Returns the size (number of IP numbers) of range of this prefix\n *\n * @return {bigint} the size (number of IP numbers) of range of this prefix\n */\n toRangeSize() {\n /**\n * Using bitwise shift operation this will be\n * 1 << (this.bitValue - this.getValue())\n * Since left shift a number by x is equivalent to multiplying the number by the power x raised to 2\n * 2 << 4 = 2 * (2 raised to 4)\n */\n return 1n << (this.bitValue - this.getValue());\n }\n /**\n * Returns a prefix for when this prefix is merged\n * with another prefix of the same size\n */\n merge() {\n return new IPv6Prefix(this.value - 1n);\n }\n /**\n * Returns a prefix for when this prefix is split\n * into two equal halves\n */\n split() {\n return new IPv6Prefix(this.value + 1n);\n }\n toHexadecatetNotation(bits) {\n let binaryStrings = bits.match(/.{1,16}/g);\n let hexadecimalStrings = binaryStrings.map((binaryString) => {\n return Hexadecatet_1.Hexadecatet.fromString((0, HexadecimalUtils_1.binaryStringToHexadecimalString)(binaryString));\n });\n return hexadecimalStrings.map((value) => { return value.toString(); }).join(\":\");\n }\n}\nexports.IPv6Prefix = IPv6Prefix;\nfunction rangeSizeToPrefix(rangeSize, rangeMaxSize) {\n let ipType = rangeMaxSize > (Validator_1.Validator.IPV4_SIZE) ? \"IPv6\" : \"IPv4\";\n if (rangeSize > (rangeMaxSize) || rangeSize === (0n)) {\n throw new Error(Validator_1.Validator.invalidIPRangeSizeMessage.replace(\"$iptype\", ipType));\n }\n try {\n return (0, BinaryUtils_1.intLog2)(rangeSize);\n }\n catch (e) {\n throw new Error(Validator_1.Validator.invalidIPRangeSizeForCidrMessage);\n }\n}\n/**\n * Check is the given Prefix is an {@link IPv4Prefix} or not\n * @param prefix the IP prefix to check if it is IPv4Prefix.\n */\nfunction isIPv4Prefix(prefix) {\n return prefix.type === \"IPv4\";\n}\n/**\n * Check is the given Prefix is an {@link IPv4Prefix} or not\n * @param prefix the IP prefix to check if it is IPv4Prefix.\n */\nfunction isIPv6Prefix(prefix) {\n return prefix.type === \"IPv6\";\n}\n//# sourceMappingURL=Prefix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPv6CidrRange = exports.IPv4CidrRange = exports.AbstractIPRange = exports.RangedSet = void 0;\nexports.isIPv4CidrRange = isIPv4CidrRange;\nconst IPNumber_1 = require(\"./IPNumber\");\nconst Prefix_1 = require(\"./Prefix\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst Validator_1 = require(\"./Validator\");\n/**\n * Represents a continuous segment of either IPv4 or IPv6 numbers\n * without adhering to classless inter-domain routing scheme\n * for allocating IP addresses.\n */\nclass RangedSet {\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from a\n * single IP number.\n *\n * @param ip The IP number, either IPv4 or IPv6 to construct the range from.\n */\n static fromSingleIP(ip) {\n return new RangedSet(ip, ip);\n }\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from an\n * instance of either {@link IPv4CidrRange} or {@link IPv6CidrRange}\n *\n * @param cidrRange an instance of {@link RangedSet}\n */\n static fromCidrRange(cidrRange) {\n return new RangedSet(cidrRange.getFirst(), cidrRange.getLast());\n }\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from\n * a range string in the form of firstIp-lastIp\n *\n * @param rangeString string in the form of firstIp-lastIp\n */\n static fromRangeString(rangeString) {\n let ips = rangeString.split(\"-\").map(ip => ip.trim());\n if (ips.length !== 2) {\n throw new Error(\"Argument should be in the format firstip-lastip\");\n }\n let [firstIPString, lastIPString] = ips;\n let [isValidFirstIPv4,] = Validator_1.Validator.isValidIPv4String(firstIPString);\n let [isValidSecondIPv4,] = Validator_1.Validator.isValidIPv4String(lastIPString);\n let [isValidFirstIPv6,] = Validator_1.Validator.isValidIPv6String(firstIPString);\n let [isValidLastIPv6,] = Validator_1.Validator.isValidIPv6String(lastIPString);\n if (isValidFirstIPv4 && isValidSecondIPv4) {\n return new RangedSet(IPNumber_1.IPv4.fromDecimalDottedString(firstIPString), IPNumber_1.IPv4.fromDecimalDottedString(lastIPString));\n }\n else if (isValidFirstIPv6 && isValidLastIPv6) {\n return new RangedSet(IPNumber_1.IPv6.fromHexadecatet(firstIPString), IPNumber_1.IPv6.fromHexadecatet(lastIPString));\n }\n else {\n throw new Error(\"First IP and Last IP should be valid and same type\");\n }\n }\n /**\n * Constructor for an instance of {@link RangedSet} from an\n * instance of either {@link IPv4CidrRange} or {@link IPv6CidrRange}\n *\n * Throws an exception if first IP number is not less than given last IP number\n *\n * @param first the first IP number of the range\n * @param last the last IP number of the range\n */\n constructor(first, last) {\n this.first = first;\n this.last = last;\n if (first.isGreaterThan(last)) {\n throw new Error(`${first.toString()} should be lower than ${last.toString()}`);\n }\n this.currentValue = first;\n this.bitValue = BigInt(first.bitSize);\n }\n /**\n * Returns the first IP number in the range\n */\n getFirst() {\n return this.first;\n }\n /**\n * Returns the last IP number in the range\n */\n getLast() {\n return this.last;\n }\n /**\n * Returns the size, which is the number of IP numbers in the range.\n */\n getSize() {\n return this.last.getValue() - (this.first.getValue()) + 1n;\n }\n /**\n * Converts to a string representation of the range in the form of:\n * <first-ip>-<last-ip>\n */\n toRangeString() {\n return `${this.getFirst()}-${this.getLast()}`;\n }\n /**\n * Checks if this range is inside another range.\n *\n * @param otherRange the other range to check if this range is inside of.\n */\n inside(otherRange) {\n return otherRange.contains(this);\n }\n /**\n * Checks if this range contains the given other range.\n *\n * @param otherRange the other range to check if this range contains\n */\n contains(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisFirst.isLessThanOrEquals(otherFirst) && thisLast.isGreaterThanOrEquals(otherLast));\n }\n /**\n * Check if this range is equal to the given other range.\n *\n * @param otherRange the other range to check if equal to this range.\n */\n isEquals(otherRange) {\n return this.getFirst().isEquals(otherRange.getFirst())\n && this.getLast().isEquals(otherRange.getLast());\n }\n ;\n /**\n * Check if this range is less than the given range.\n *\n * @param otherRange the other range to check if less than.\n */\n isLessThan(otherRange) {\n if (this.isEquals(otherRange)) {\n return false;\n }\n else {\n if (this.getFirst().isEquals(otherRange.getFirst())) {\n return this.getSize() < (otherRange.getSize());\n }\n return this.getFirst().isLessThan(otherRange.getFirst());\n }\n }\n /**\n * Check if this range is greater than the given range.\n *\n * @param otherRange the other range to check if greater than.\n */\n isGreaterThan(otherRange) {\n if (this.isEquals(otherRange)) {\n return false;\n }\n else {\n if (this.getFirst().isEquals(otherRange.getFirst())) {\n return this.getSize() > (otherRange.getSize());\n }\n return this.getFirst().isGreaterThan(otherRange.getFirst());\n }\n }\n /**\n * Checks of this range overlaps with a given other range.\n *\n * This means it checks if part of a range is part of another range without\n * being totally contained in the other range. Hence Equal or ranges contained inside one\n * another are not considered as overlapping.\n *\n * @param otherRange the other range to check if it overlaps with this range.\n */\n isOverlapping(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisLast.isGreaterThan(otherFirst) && thisLast.isLessThanOrEquals(otherLast) && thisFirst.isLessThan(otherFirst)\n ||\n otherLast.isGreaterThan(thisFirst) && otherLast.isLessThanOrEquals(thisLast) && otherFirst.isLessThan(thisFirst)\n ||\n this.contains(otherRange)\n ||\n otherRange.contains(this));\n }\n /**\n * Check if this range can be converted to a CIDR range.\n */\n isCidrAble() {\n if (this.getSize() === 1n) {\n return true;\n }\n try {\n let prefix = (0, BinaryUtils_1.intLog2)(this.getSize());\n let netmask = (0, BinaryUtils_1.parseBinaryStringToBigInt)((0, BinaryUtils_1.cidrPrefixToMaskBinaryString)(prefix, (0, IPNumber_1.isIPv4)(this.currentValue) ? \"IPv4\" /* IPNumType.IPv4 */ : \"IPv6\" /* IPNumType.IPv6 */));\n return (this.first.getValue()) === (netmask & (this.first.getValue()));\n }\n catch (e) {\n return false;\n }\n }\n /**\n * Converts an instance of range to an instance of CIDR range\n */\n toCidrRange() {\n if ((0, IPNumber_1.isIPv4)(this.currentValue)) {\n return this.toIPv4CidrRange();\n }\n else {\n return this.toIPv6CidrRange();\n }\n }\n ;\n /**\n * Checks if this range is consecutive with another range.\n *\n * This means if the two ranges can be placed side by side, without any gap. Hence Equal\n * or ranges contained inside one another, or overlapping ranges are not considered as consecutive.\n *\n * @param otherRange the other range to check if this range is consecutive to.\n */\n isConsecutive(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisLast.hasNext() && thisLast.nextIPNumber().isEquals(otherFirst)\n ||\n otherLast.hasNext() && otherLast.nextIPNumber().isEquals(thisFirst));\n }\n /**\n * Creates a range that is a union of this range and the given other range.\n *\n * @param otherRange the other range to combine with this range\n */\n union(otherRange) {\n if (this.isEquals(otherRange)) {\n return new RangedSet(otherRange.getFirst(), otherRange.getLast());\n }\n if (this.contains(otherRange)) {\n return new RangedSet(this.getFirst(), this.getLast());\n }\n else if (otherRange.contains(this)) {\n return new RangedSet(otherRange.getFirst(), otherRange.getLast());\n }\n if (this.isOverlapping(otherRange)) {\n if (this.getFirst().isLessThan(otherRange.getFirst())) {\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n else {\n return new RangedSet(otherRange.getFirst(), this.getLast());\n }\n }\n throw new Error(\"Ranges do not overlap nor are equal\");\n }\n /**\n * Prepends given range with this range.\n * The last IP in the given range should be adjacent to the first IP in this range\n *\n * @param otherRange the other range to prepend\n */\n prepend(otherRange) {\n if (otherRange.getLast().nextIPNumber().isEquals(this.getFirst())) {\n return new RangedSet(otherRange.getFirst(), this.getLast());\n }\n else {\n throw new Error(\"Range to prepend must be adjacent\");\n }\n }\n /**\n * Appends given range with this range.\n * The last IP in this range should be adjacent to the first IP in range to append\n *\n * @param otherRange the other range to append\n */\n append(otherRange) {\n if (this.getLast().nextIPNumber().isEquals(otherRange.getFirst())) {\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n else {\n throw new Error(\"Range to append must be adjacent\");\n }\n }\n subtract(otherRange) {\n if (!this.isOverlapping(otherRange)) {\n throw new Error(\"Cannot subtract ranges that are not overlapping\");\n }\n if (!this.isLessThan(otherRange)) {\n throw new Error(\"Cannot subtract a larger range from this range\");\n }\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n /**\n * Returns a sub range of a given size from this range.\n *\n * @param offset offset from this range where the subrange should begin\n * @param size the size of the range\n */\n takeSubRange(offset, size) {\n if (offset + (size) > (this.getSize())) {\n throw new RangeError(\"Requested range is greater than what can be taken\");\n }\n if (size === (0n)) {\n throw new Error(\"Sub range cannot be zero\");\n }\n let valueOfFirstIp = this.getFirst().value + (offset);\n let firstIp = (0, IPNumber_1.isIPv4)(this.getFirst()) ?\n IPNumber_1.IPv4.fromNumber(valueOfFirstIp) : IPNumber_1.IPv6.fromBigInt(valueOfFirstIp);\n let valueOfLastIp = firstIp.value + (size - 1n);\n let lastIp = (0, IPNumber_1.isIPv4)(firstIp) ? IPNumber_1.IPv4.fromNumber(valueOfLastIp) : IPNumber_1.IPv6.fromBigInt(valueOfLastIp);\n return new RangedSet(firstIp, lastIp);\n }\n /**\n * Performs a subtraction operation, where the passed range is removed from the original range.\n *\n * The return range from the subtraction operation could be a single or multiple ranges\n *\n * @param range\n */\n difference(range) {\n if (range.getSize() > (this.getSize())) {\n throw new Error(\"Range is greater than range to be subtracted from\");\n }\n if (!this.contains(range)) {\n throw new Error(\"Range to subtract is not contained in this range\");\n }\n let reminders = [];\n try {\n reminders.push(new RangedSet(this.getFirst(), range.getFirst().previousIPNumber()));\n }\n catch (e) { }\n try {\n reminders.push(new RangedSet(range.getLast().nextIPNumber(), this.getLast()));\n }\n catch (e) { }\n return reminders;\n }\n *take(count) {\n let computed = this.getFirst();\n let returnCount = count === undefined ? this.getSize().valueOf() : count;\n while (returnCount > 0) {\n returnCount--;\n yield computed;\n computed = computed.nextIPNumber();\n }\n }\n *[Symbol.iterator]() {\n yield* this.take();\n }\n toIPv4CidrRange() {\n let candidateRange = new IPv4CidrRange(IPNumber_1.IPv4.fromNumber(this.getFirst().getValue()), Prefix_1.IPv4Prefix.fromRangeSize(this.getSize()));\n if (candidateRange.getFirst().isEquals(this.getFirst())) {\n return candidateRange;\n }\n else {\n throw new Error(\"Range cannot be converted to CIDR\");\n }\n }\n toIPv6CidrRange() {\n let candidateRange = new IPv6CidrRange(IPNumber_1.IPv6.fromBigInt(this.getFirst().getValue()), Prefix_1.IPv6Prefix.fromRangeSize(this.getSize()));\n if (candidateRange.getFirst().isEquals(this.getFirst())) {\n return candidateRange;\n }\n else {\n throw new Error(\"Range cannot be converted to CIDR\");\n }\n }\n}\nexports.RangedSet = RangedSet;\n/**\n * Provides the implementation of functionality that are common to {@link IPv4CidrRange} and {@link IPv6CidrRange}\n */\nclass AbstractIPRange {\n hasNextRange() {\n let sizeOfCurrentRange = this.getSize();\n return ((2n ** this.bitValue) - sizeOfCurrentRange) >= (this.getFirst().getValue() + (sizeOfCurrentRange));\n }\n hasPreviousRange() {\n return this.getSize() <= (this.getFirst().getValue());\n }\n toRangeSet() {\n return new RangedSet(this.getFirst(), this.getLast());\n }\n inside(otherRange) {\n return this.toRangeSet().inside(otherRange.toRangeSet());\n }\n contains(otherRange) {\n if (otherRange instanceof IPNumber_1.AbstractIPNum) {\n const firstValue = this.getFirst().getValue();\n const lastValue = this.getLast().getValue();\n const otherValue = otherRange.getValue();\n return otherValue >= firstValue && otherValue <= lastValue;\n }\n return this.toRangeSet().contains(otherRange.toRangeSet());\n }\n toRangeString() {\n return this.toRangeSet().toRangeString();\n }\n isOverlapping(otherRange) {\n return this.toRangeSet().isOverlapping(otherRange.toRangeSet());\n }\n isConsecutive(otherRange) {\n return this.toRangeSet().isConsecutive(otherRange.toRangeSet());\n }\n isCidrMergeable(otherRange) {\n const count = BigInt((0, BinaryUtils_1.matchingBitCount)(this.getFirst().toBinaryString(), otherRange.getFirst().toBinaryString()));\n if (this.getPrefix().value - count !== 1n) {\n return false;\n }\n return this.isConsecutive(otherRange) && this.getSize() === (otherRange.getSize());\n }\n isMergeable(otherRange) {\n return this.isCidrMergeable(otherRange)\n || this.contains(otherRange)\n || this.inside(otherRange);\n }\n isEquals(otherRange) {\n return this.toRangeSet().isEquals(otherRange.toRangeSet());\n }\n merge(otherRange) {\n if (!this.isCidrMergeable(otherRange)) {\n throw new Error(`Cannot merge. Ranges (${this.toRangeString()},${otherRange.toRangeString()}) are not consecutive and/or of same size`);\n }\n return this.newInstance(this.getFirst(), this.getPrefix().merge());\n }\n /**\n * Returns a lazily evaluated representation of the IP range that produces IP numbers by either:\n *\n * - iterating over using the for of syntax\n * - converting to array using spread syntax\n * - or assigning values to variables using deconstruction\n *\n * @param count the number of IP numbers to lazily evaluate.\n * If none is given, the whole IP range is lazily returned.\n */\n *takeStream(count) {\n return this.toRangeSet().take(count);\n }\n *[Symbol.iterator]() {\n yield* this.toRangeSet();\n }\n}\nexports.AbstractIPRange = AbstractIPRange;\n/**\n * Represents a continuous segment of IPv4 numbers following the\n * classless inter-domain routing scheme for allocating IP addresses.\n *\n * @see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\n */\nclass IPv4CidrRange extends AbstractIPRange {\n /**\n * Convenience method for constructing an instance of an IPv4CidrRange from an IP range represented in CIDR notation\n *\n * @param {string} rangeIncidrNotation the range of the IPv4 number in CIDR notation\n * @returns {IPv4CidrRange} the IPv4CidrRange\n */\n static fromCidr(rangeIncidrNotation) {\n let [isValid, errorMessages] = Validator_1.Validator.isValidIPv4CidrNotation(rangeIncidrNotation);\n if (!isValid) {\n let messages = errorMessages.filter(message => { return message !== ''; });\n throw new Error(messages.join(' and '));\n }\n let cidrComponents = rangeIncidrNotation.split(\"/\");\n let ipString = cidrComponents[0];\n let prefix = BigInt(parseInt(cidrComponents[1]));\n return new IPv4CidrRange(IPNumber_1.IPv4.fromDecimalDottedString(ipString), Prefix_1.IPv4Prefix.fromNumber(prefix));\n }\n /**\n * Constructor for creating an instance of an IPv4 range.\n *\n * The arguments taken by the constructor is inspired by the CIDR notation which basically consists of the IP\n * number and the prefix.\n *\n * @param {IPv4} ipv4 the IP number used to construct the range. By convention this is the first IP number in\n * the range, but it could also be any IP number within the range\n * @param {IPv4Prefix} cidrPrefix the prefix which is a representation of the number of bits used to mask the\n * given IP number in other to create the range\n */\n constructor(ipv4, cidrPrefix) {\n super();\n this.ipv4 = ipv4;\n this.cidrPrefix = cidrPrefix;\n this.bitValue = 32n;\n }\n /**\n * Gets the size of IPv4 numbers contained within the IPv4 range\n *\n * @returns {bigint} the amount of IPv4 numbers in the range\n */\n getSize() {\n return this.cidrPrefix.toRangeSize();\n }\n /**\n * Method that returns the IPv4 range in CIDR (Classless Inter-Domain Routing) notation.\n *\n * See {@link https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation} for more information\n * on the Classless Inter-Domain Routing notation\n *\n * @returns {string} the IPv4 range in CIDR (Classless Inter-Domain Routing) notation\n */\n toCidrString() {\n let first = this.ipv4.toString();\n return `${first.toString()}/${this.cidrPrefix.toString()}`;\n }\n /**\n * Method that returns the IPv4 range in string notation where the first IPv4 number and last IPv4 number are\n * separated by an hyphen. eg. 192.198.0.0-192.198.0.255\n *\n * @returns {string} the range in [first IPv4 number] - [last IPv4 number] format\n */\n toRangeString() {\n return super.toRangeString();\n }\n /**\n * Method that returns the first IPv4 number in the IPv4 range\n *\n * @returns {IPv4} the first IPv4 number in the IPv4 range\n */\n getFirst() {\n return IPNumber_1.IPv4.fromNumber(this.ipv4.getValue() & (this.cidrPrefix.toMask().getValue()));\n }\n /**\n * Method that returns the last IPv4 number in the IPv4 range\n *\n * @returns {IPv4} the last IPv4 number in the IPv4 range\n */\n getLast() {\n return last(this, this.ipv4);\n }\n newInstance(num, prefix) {\n return new IPv4CidrRange(num, prefix);\n }\n getPrefix() {\n return this.cidrPrefix;\n }\n /**\n * Indicates whether the given IPv4 range is an adjacent range.\n *\n * An adjacent range being one where the end of the given range, when incremented by one marks the start of the\n * other range. Or where the start of the given range, when decreased by one, marks the end of the other range\n *\n * @param {IPv4CidrRange} otherRange the other IPv4 range to compare with\n * @returns {boolean} true if the two IPv4 ranges are consecutive, false otherwise\n */\n isConsecutive(otherRange) {\n return super.isConsecutive(otherRange);\n }\n /**\n * Indicates if the given IPv4 range is a subset.\n *\n * By a subset range, it means all the values of the given range are contained by this IPv4 range\n *\n * @param {IPv4CidrRange} otherRange the other IPv4 range\n * @returns {boolean} true if the other Ipv4 range is a subset. False otherwise.\n */\n contains(otherRange) {\n return super.contains(otherRange);\n }\n /**\n * Indicate if the given range is a container range.\n *\n * By container range, it means all the IP number in this current range can be found within the given range.\n *\n * @param {IPv4CidrRange} otherRange he other IPv4 range\n * @returns {boolean} true if the other Ipv4 range is a container range. False otherwise.\n */\n inside(otherRange) {\n return super.inside(otherRange);\n }\n /**\n * Checks if two IPv4 ranges overlap\n * @param {IPv4CidrRange} otherRange the other IPv4 range\n * @returns {boolean} true if the ranges overlap, false otherwise\n */\n isOverlapping(otherRange) {\n return super.isOverlapping(otherRange);\n }\n /**\n * Method that takes IPv4 number from within an IPv4 range, starting from the first IPv4 number\n *\n * @param {bigint} count the amount of IPv4 number to take from the IPv4 range\n * @returns {Array<IPv4>} an array of IPv4 number, taken from the IPv4 range\n */\n take(count) {\n let ipv4s = [this.getFirst()];\n let iteratingIPv4 = this.getFirst();\n if (count > (this.getSize())) {\n let errMessage = Validator_1.Validator.takeOutOfRangeSizeMessage\n .replace(\"$count\", count.toString())\n .replace(\"$size\", this.getSize().toString());\n throw new Error(errMessage);\n }\n for (let counter = 0; counter < count - 1n; counter++) {\n ipv4s.push(iteratingIPv4.nextIPNumber());\n iteratingIPv4 = iteratingIPv4.nextIPNumber();\n }\n return ipv4s;\n }\n /**\n * Method that splits an IPv4 range into two halves\n *\n * @returns {Array<IPv4CidrRange>} An array of two {@link IPv4CidrRange}\n */\n split() {\n let prefixToSplit = this.cidrPrefix.getValue();\n if (prefixToSplit === 32n) {\n throw new Error(\"Cannot split an IP range with a single IP number\");\n }\n let splitCidr = Prefix_1.IPv4Prefix.fromNumber(prefixToSplit + 1n);\n let firstIPOfFirstRange = this.getFirst();\n let firstRange = new IPv4CidrRange(firstIPOfFirstRange, splitCidr);\n let firstIPOfSecondRange = firstRange.getLast().nextIPNumber();\n let secondRange = new IPv4CidrRange(firstIPOfSecondRange, splitCidr);\n return [firstRange, secondRange];\n }\n /**\n * Method that split prefix into ranges of the given prefix,\n * throws an exception if the size of the given prefix is larger than target prefix\n *\n * @param prefix the prefix to use to split\n * @returns {Array<IPv4CidrRange>} An array of two {@link IPv4CidrRange}\n */\n splitInto(prefix) {\n let splitCount = prefix.getValue() - this.cidrPrefix.getValue();\n if (splitCount < 0) {\n throw new Error(\"Prefix to split into is larger than source prefix\");\n }\n else if (splitCount === 0n) {\n return [new IPv4CidrRange(this.getFirst(), prefix)];\n }\n else if (splitCount === 1n) {\n return this.split();\n }\n else {\n let results = this.split();\n while (splitCount > 1) {\n results = results.flatMap(result => result.split());\n splitCount = splitCount - 1n;\n }\n return results;\n }\n }\n /**\n * Returns true if there is an adjacent IPv4 cidr range of exactly the same size next to this range\n */\n hasNextRange() {\n return super.hasNextRange();\n }\n /**\n * Returns true if there is an adjacent IPv4 cidr range of exactly the same size previous to this range\n */\n hasPreviousRange() {\n return super.hasPreviousRange();\n }\n /**\n * Return the next IPv6 cidr range, or undefined if no next range\n */\n nextRange() {\n if (this.hasNextRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfNextRange = this.getFirst().getValue() + (sizeOfCurrentRange);\n return new IPv4CidrRange(new IPNumber_1.IPv4(startOfNextRange), this.cidrPrefix);\n }\n return;\n }\n /**\n * Return the previous IPv6 cidr range, or undefined if no next range\n */\n previousRange() {\n if (this.hasPreviousRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfPreviousRange = this.getFirst().getValue() - (sizeOfCurrentRange);\n return new IPv4CidrRange(new IPNumber_1.IPv4(startOfPreviousRange), this.cidrPrefix);\n }\n return;\n }\n}\nexports.IPv4CidrRange = IPv4CidrRange;\n/**\n * Represents a continuous segment of IPv6 number following the\n * classless inter-domain routing scheme for allocating IP addresses.\n *\n * @see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\n */\nclass IPv6CidrRange extends AbstractIPRange {\n /**\n * Convenience method for constructing an instance of an IPV6Range from an IP range represented in CIDR notation\n *\n * @param {string} rangeInCidrNotation the range of the IPv6 number in CIDR notation\n * @returns {IPv6CidrRange} the IPV6Range\n */\n static fromCidr(rangeInCidrNotation) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6CidrNotation(rangeInCidrNotation);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let cidrComponents = rangeInCidrNotation.split(\"/\");\n let ipString = cidrComponents[0];\n let prefix = BigInt(parseInt(cidrComponents[1]));\n return new IPv6CidrRange(IPNumber_1.IPv6.fromHexadecatet(ipString), Prefix_1.IPv6Prefix.fromNumber(prefix));\n }\n ;\n /**\n * Constructor for creating an instance of an IPv6 range.\n *\n * The arguments taken by the constructor is inspired by the CIDR notation which basically consists of the IP\n * number and the prefix.\n *\n * @param {IPv6} ipv6 the IP number used to construct the range. By convention this is the first IP number in\n * the range, but it could also be any IP number within the range\n * @param {IPv6Prefix} cidrPrefix the prefix which is a representation of the number of bits used to mask the\n * given IPv6 number in other to create the range\n */\n constructor(ipv6, cidrPrefix) {\n super();\n this.ipv6 = ipv6;\n this.cidrPrefix = cidrPrefix;\n this.bitValue = 128n;\n }\n /**\n * Gets the size of IPv6 numbers contained within the IPv6 range\n *\n * @returns {bigint} the amount of IPv6 numbers in the range\n */\n getSize() {\n return this.cidrPrefix.toRangeSize();\n }\n /**\n * Method that returns the IPv6 range in CIDR (Classless Inter-Domain Routing) notation.\n *\n * See {@link https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation} for more information\n * on the Classless Inter-Domain Routing notation\n *\n * @returns {string} the IPv6 range in CIDR (Classless Inter-Domain Routing) notation\n */\n toCidrString() {\n let first = this.ipv6.toString();\n return `${first.toString()}/${this.cidrPrefix.toString()}`;\n }\n /**\n * Method that returns the IPv6 range in string notation where the first IPv6 number and last IPv6 number are\n * separated by an hyphen. eg. \"2001:db8:0:0:0:0:0:0-2001:db8:0:ffff:ffff:ffff:ffff:ffff\"\n *\n * @returns {string} the range in [first IPv6 number] - [last IPv6 number] format\n */\n toRangeString() {\n return super.toRangeString();\n }\n /**\n * Method that returns the first IPv6 number in the IPv6 range\n *\n * @returns {IPv6} the first IPv6 number in the IPv6 range\n */\n getFirst() {\n return IPNumber_1.IPv6.fromBigInt(this.ipv6.getValue() & (this.cidrPrefix.toMask().getValue()));\n }\n /**\n * Method that returns the last IPv6 number in the IPv6 range\n *\n * @returns {IPv6} the last IPv6 number in the IPv6 range\n */\n getLast() {\n return last(this, this.ipv6);\n }\n newInstance(num, prefix) {\n return new IPv6CidrRange(num, prefix);\n }\n getPrefix() {\n return this.cidrPrefix;\n }\n /**\n * Indicates whether the given IPv6 range is an adjacent range.\n *\n * An adjacent range being one where the end of the given range, when incremented by one marks the start of the\n * other range. Or where the start of the given range, when decreased by one, marks the end of the other range\n *\n * @param {IPv6CidrRange} otherRange the other IPv6 range to compare with\n * @returns {boolean} true if the two IPv6 ranges are consecutive, false otherwise\n */\n isConsecutive(otherRange) {\n return super.isConsecutive(otherRange);\n }\n /**\n * Indicates if the given IPv6 range is a subset.\n *\n * By a subset range, it means all the values of the given range are contained by this IPv6 range\n *\n * @param {IPv6CidrRange} otherRange the other IPv6 range\n * @returns {boolean} true if the other Ipv6 range is a subset. False otherwise.\n */\n contains(otherRange) {\n return super.contains(otherRange);\n }\n /**\n * Indicate if the given range is a container range.\n *\n * By container range, it means all the IP number in this current range can be found within the given range.\n *\n * @param {IPv6CidrRange} otherRange he other IPv6 range\n * @returns {boolean} true if the other Ipv6 range is a container range. False otherwise.\n */\n inside(otherRange) {\n return super.inside(otherRange);\n }\n /**\n * Checks if two IPv6 ranges overlap\n * @param {IPv6CidrRange} otherRange the other IPv6 range\n * @returns {boolean} true if the ranges overlap, false otherwise\n */\n isOverlapping(otherRange) {\n return super.isOverlapping(otherRange);\n }\n /**\n * Method that takes IPv6 number from within an IPv6 range, starting from the first IPv6 number\n *\n * @param {bigint} count the amount of IPv6 number to take from the IPv6 range\n * @returns {Array<IPv6>} an array of IPv6 number, taken from the IPv6 range\n */\n take(count) {\n let iPv6s = [this.getFirst()];\n let iteratingIPv6 = this.getFirst();\n if (count > (this.getSize())) {\n throw new Error(`${count.toString()} is greater than ${this.getSize().toString()}, the size of the range`);\n }\n for (var counter = 0; counter < count - 1n; counter++) {\n iPv6s.push(iteratingIPv6.nextIPNumber());\n iteratingIPv6 = iteratingIPv6.nextIPNumber();\n }\n return iPv6s;\n }\n /**\n * Method that splits an IPv6 cidr range into two halves\n *\n * @returns {Array<IPv6CidrRange>} An array of two {@link IPv6CidrRange}\n */\n split() {\n let prefixToSplit = this.cidrPrefix.getValue();\n if (prefixToSplit === 128n) {\n throw new Error(\"Cannot split an IP range with a single IP number\");\n }\n let splitCidr = Prefix_1.IPv6Prefix.fromNumber(prefixToSplit + 1n);\n let firstIPOfFirstRange = this.getFirst();\n let firstRange = new IPv6CidrRange(firstIPOfFirstRange, splitCidr);\n let firstIPOfSecondRange = firstRange.getLast().nextIPNumber();\n let secondRange = new IPv6CidrRange(firstIPOfSecondRange, splitCidr);\n return [firstRange, secondRange];\n }\n /**\n * Method that split prefix into ranges of the given prefix,\n * throws an exception if the size of the given prefix is larger than target prefix\n *\n * @param prefix the prefix to use to split\n * @returns {Array<IPv6CidrRange>} An array of two {@link IPv6CidrRange}\n */\n splitInto(prefix) {\n let splitCount = prefix.getValue() - this.cidrPrefix.getValue();\n if (splitCount < 0) {\n throw new Error(\"Prefix to split into is larger than source prefix\");\n }\n else if (splitCount === 0n) {\n return [new IPv6CidrRange(this.getFirst(), prefix)];\n }\n else if (splitCount === 1n) {\n return this.split();\n }\n else {\n let results = this.split();\n while (splitCount > 1) {\n results = results.flatMap(result => result.split());\n splitCount = splitCount - 1n;\n }\n return results;\n }\n }\n /**\n * Returns true if there is an adjacent IPv6 cidr range of exactly the same size next to this range\n */\n hasNextRange() {\n return super.hasNextRange();\n }\n /**\n * Returns true if there is an adjacent IPv6 cidr range of exactly the same size previous to this range\n */\n hasPreviousRange() {\n return super.hasPreviousRange();\n }\n /**\n * Return the next IPv6 cidr range, or undefined if no next range\n */\n nextRange() {\n if (this.hasNextRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfNextRange = this.getFirst().getValue() + (sizeOfCurrentRange);\n return new IPv6CidrRange(new IPNumber_1.IPv6(startOfNextRange), this.cidrPrefix);\n }\n return;\n }\n /**\n * Return the previous IPv6 cidr range, or undefined if no next range\n */\n previousRange() {\n if (this.hasPreviousRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfPreviousRange = this.getFirst().getValue() - sizeOfCurrentRange;\n return new IPv6CidrRange(new IPNumber_1.IPv6(startOfPreviousRange), this.cidrPrefix);\n }\n return;\n }\n}\nexports.IPv6CidrRange = IPv6CidrRange;\n// utility functions shared by both IPv6CidrRange and IPv4CidrRange\nlet last = (range, ip) => {\n let bitValue = Number(range.bitValue.valueOf());\n let maskSize = BigInt(`0b${\"1\".repeat(bitValue)}`);\n let maskAsBigInteger = range.cidrPrefix.toMask().getValue();\n let invertedMask = (0, BinaryUtils_1.leftPadWithZeroBit)((maskAsBigInteger ^ (maskSize)).toString(2), bitValue);\n if (isIPv4CidrRange(range)) {\n return IPNumber_1.IPv4.fromNumber((ip.getValue()) | ((0, BinaryUtils_1.parseBinaryStringToBigInt)(invertedMask)));\n }\n else {\n return IPNumber_1.IPv6.fromBigInt((ip.getValue()) | ((0, BinaryUtils_1.parseBinaryStringToBigInt)(invertedMask)));\n }\n};\nfunction isIPv4CidrRange(ip) {\n return ip.bitValue.valueOf() === 32n;\n}\n//# sourceMappingURL=IPRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pool = void 0;\nconst IPRange_1 = require(\"./IPRange\");\nconst Prefix_1 = require(\"./Prefix\");\n/**\n * Represents a collection of IP {@link RangedSet}'s\n */\nclass Pool {\n /**\n * Convenient method for creating an instance from arrays of {@link IPv4} or {@link IPv6}\n * @param ipNumbers the arrays of {@link IPv4} or {@link IPv6} that will make up the pool.\n */\n static fromIP(ipNumbers) {\n let ranges = ipNumbers.map((ip) => {\n return IPRange_1.RangedSet.fromSingleIP(ip);\n });\n return new Pool(ranges);\n }\n /**\n * Convenient method for creating an instance from arrays of {@link RangedSet}.\n *\n * @param ipRanges the arrays of {@link RangedSet}'s that will make up the pool.\n */\n // TODO: TSE: This makes it possible to create an instance containing both Range set of IPv4 and IPv6\n static fromRangeSet(ipRanges) {\n return new Pool(ipRanges);\n }\n /**\n * Convenient method for creating an instance from arrays of {@link IPv4CidrRange} or {@link IPv6CidrRange}.\n *\n * @param cidrRanges the arrays of {@link IPv4CidrRange} or {@link IPv6CidrRange} that will make up the pool.\n */\n static fromCidrRanges(cidrRanges) {\n let cidr = cidrRanges;\n let rangeSet = cidr.map((range) => {\n return range.toRangeSet();\n });\n return new Pool(rangeSet);\n }\n /**\n * Constructor for an IP pool.\n *\n * Creates a Pool of IP ranges from supplied {@link RangedSet}'s\n *\n * @param ranges the array of IP ranges that would make up the pool.\n */\n constructor(ranges) {\n this.backingSet = new SortedSet();\n ranges.forEach(range => {\n this.backingSet.add(range);\n });\n }\n /**\n * Returns an array of {@link RangedSet}'s that is contained within the pool\n */\n getRanges() {\n return this.backingSet.asArray();\n }\n /**\n * Returns an new {@link Pool} with all the IP ranges aggregated\n */\n aggregate() {\n let sortedRanges = this.backingSet.asArray();\n let mergedRanges = sortedRanges.reduce((accumulator, currentRange, currentIndex, array) => {\n if (accumulator.length == 0) {\n accumulator.push(currentRange);\n return accumulator;\n }\n else {\n let previous = accumulator.pop();\n let previousCidrRange = previous.toCidrRange();\n let currentCidrRange = currentRange.toCidrRange();\n if (previousCidrRange.isCidrMergeable(currentCidrRange)) {\n let merged = previousCidrRange.merge(currentCidrRange);\n accumulator.push(merged.toRangeSet());\n return accumulator;\n }\n else {\n if (!previous.contains(currentRange)) {\n accumulator.push(previous);\n accumulator.push(currentRange);\n }\n else {\n accumulator.push(previous);\n }\n return accumulator;\n }\n }\n }, []);\n let aggregatedPool = Pool.fromRangeSet(mergedRanges);\n if (aggregatedPool.getRanges().length !== this.getRanges().length) {\n return aggregatedPool.aggregate();\n }\n else {\n return aggregatedPool;\n }\n }\n /**\n * Gets a single range of size of the given prefix from pool.\n * Only returns a range if there is a single range in the pool of same size or greater than given prefix.\n *\n * throws exception if the requested range cannot be got from the pool.\n *\n * @param prefix prefix range to retrieve\n * TODO TSE\n */\n getCidrRange(prefix) {\n if (prefix.toRangeSize() > (this.getSize())) {\n throw new Error(`Not enough IP number in the pool for requested prefix: ${prefix}`);\n }\n let selectedCidrRange;\n let error;\n loop: for (let range of this.getRanges()) {\n for (let offset = 0n; offset + (prefix.toRangeSize()) <= (range.getSize()); offset = offset + 1n)\n try {\n let selectedRange = range.takeSubRange(offset, prefix.toRangeSize());\n selectedCidrRange = selectedRange.toCidrRange();\n let remaining = range.difference(selectedRange);\n this.removeExact(range);\n this.add(remaining);\n break loop;\n }\n catch (e) {\n if (e instanceof RangeError) {\n continue loop;\n }\n error = e instanceof Error ? e : new Error(String(e));\n }\n }\n if (selectedCidrRange) {\n return selectedCidrRange;\n }\n else {\n throw (error === undefined ? new Error(`No range big enough in the pool for requested prefix: ${prefix}`) : error);\n }\n }\n /**\n * Gets a single or multiple ranges that fulfils the given prefix from the pool.\n *\n * throws exception if the requested range cannot be got from the pool.\n *\n * @param reqprefix prefix range to retrieve\n */\n getCidrRanges(reqprefix) {\n if (reqprefix.toRangeSize() > (this.getSize())) {\n throw new Error(\"Prefix greater than pool\");\n }\n let go = (reqprefix, prefix, accummulated) => {\n try {\n let singleCidrRange = this.getCidrRange(prefix);\n accummulated.push(singleCidrRange);\n let currentSize = accummulated.reduce((previous, current) => {\n return previous + (current.getSize());\n }, 0n);\n if (reqprefix.toRangeSize() === (currentSize)) {\n return accummulated;\n }\n else {\n return go(reqprefix, prefix, accummulated);\n }\n }\n catch (e) {\n let lowerPrefix = (0, Prefix_1.isIPv4Prefix)(prefix) ?\n Prefix_1.IPv4Prefix.fromNumber(prefix.getValue() + 1n) : Prefix_1.IPv6Prefix.fromNumber(prefix.getValue() + 1n);\n return go(reqprefix, lowerPrefix, accummulated);\n }\n };\n return go(reqprefix, reqprefix, []);\n }\n /**\n * Returns the size of IP numbers in the pool\n */\n getSize() {\n return this\n .aggregate()\n .getRanges()\n .reduce((previous, current) => {\n return previous + current.getSize();\n }, 0n);\n }\n /**\n * Empties the pool and fill it with given ranges\n *\n * @param ipRanges the range to fill the pool with after emptying\n */\n resetWith(ipRanges) {\n this.backingSet.clear();\n this.backingSet = this.backingSet.add(ipRanges);\n }\n /**\n * Removes the given range from the pool. It only removes if the exact range exist in the pool.\n * It is a Noop and returns false, if the given range does not exist in the pool. Returns true otherwise\n *\n * @param rangeToRemove range to remove from ppol\n */\n removeExact(rangeToRemove) {\n let updatedSet = this.backingSet.removeExact(rangeToRemove);\n let isUpdated = !this.backingSet.isEquals(updatedSet);\n this.backingSet = updatedSet;\n return isUpdated;\n }\n /**\n * Removes the given range from the pool. If the given range overlaps, then it removes the overlapping portion.\n * It is a Noop and returns false, if the given range does not exist in the pool. Returns true otherwise\n *\n * @param rangeToRemove range to remove from ppol\n */\n removeOverlapping(rangeToRemove) {\n let updatedSet = this.backingSet.removeOverlapping(rangeToRemove);\n let isUpdated = !this.backingSet.isEquals(updatedSet);\n this.backingSet = updatedSet;\n return isUpdated;\n }\n /**\n * Adds the given range to the pool.\n *\n * @param range to add to pool.\n */\n add(range) {\n this.backingSet = this.backingSet.add(range);\n }\n /**\n * Removes all ranges from pool\n */\n clear() {\n this.backingSet.clear();\n }\n}\nexports.Pool = Pool;\nclass SortedSet {\n sortArray(array) {\n array.sort((a, b) => {\n if (a.isLessThan(b)) {\n return -1;\n }\n if (a.isGreaterThan(b)) {\n return 1;\n }\n return 0;\n });\n return array;\n }\n constructor(array) {\n if (array) {\n this.backingArray = this.sortArray(array);\n }\n else {\n this.backingArray = new Array();\n }\n }\n asArray() {\n return this.backingArray;\n }\n isEquals(other) {\n if (this.backingArray.length !== other.asArray().length) {\n return false;\n }\n return this.backingArray.every((value, index) => {\n return value.getSize() === (other.asArray()[index].getSize());\n });\n }\n add(item) {\n let array = this.backingArray;\n if (\"push\" in item) {\n array = array.concat(item);\n }\n else {\n array.push(item);\n }\n return new SortedSet(this.sortArray(array));\n }\n removeExact(items) {\n let filtered = this.backingArray\n .filter(currentItem => {\n if (\"push\" in items) {\n return items.find(item => item.isEquals(currentItem)) !== undefined;\n }\n else {\n return !items.isEquals(currentItem);\n }\n });\n return new SortedSet(this.sortArray(filtered));\n }\n removeOverlapping(items) {\n let filtered = this.backingArray\n .flatMap(backingItem => {\n if (\"push\" in items) {\n return items.flatMap(item => {\n if (backingItem.contains(item)) {\n return backingItem.difference(item);\n }\n else if (backingItem.inside(item)) {\n return new Array();\n }\n else if (backingItem.isOverlapping(item)) {\n return [backingItem.subtract(item)];\n }\n else {\n return [item];\n }\n });\n }\n else {\n try {\n return backingItem.difference(items);\n }\n catch (e) {\n return backingItem;\n }\n }\n });\n return new SortedSet(this.sortArray(filtered));\n }\n clear() {\n this.backingArray = [];\n }\n}\n//# sourceMappingURL=IPPool.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Exposes all the library's modules making them available from the \"ip-num\" module.\n * Making it possible to get access to all any of the modules by doing require(\"ip-num\")\n *\n * @example\n * let ipNum = require(\"ip-num\")\n * ipNum.IPv4CidrRange // gets access to IPv4CidrRange\n * ipNum.Asn // gets access to Asn\n */\n__exportStar(require(\"./BinaryUtils\"), exports);\n__exportStar(require(\"./Hexadecatet\"), exports);\n__exportStar(require(\"./HexadecimalUtils\"), exports);\n__exportStar(require(\"./IPNumber\"), exports);\n__exportStar(require(\"./IPNumType\"), exports);\n__exportStar(require(\"./IPPool\"), exports);\n__exportStar(require(\"./IPRange\"), exports);\n__exportStar(require(\"./IPv6Utils\"), exports);\n__exportStar(require(\"./Octet\"), exports);\n__exportStar(require(\"./Prefix\"), exports);\n__exportStar(require(\"./Validator\"), exports);\n//# sourceMappingURL=index.js.map","import { t } from \"i18next\";\nimport { IPv4, IPv6, Validator } from \"ip-num\";\nimport { assoc, isNil, isNotNil } from \"ramda\";\nimport * as yup from \"yup\";\n\nconst toLabelAndValue = value => ({\n label: humanizeIpAddressFormat(value),\n value,\n});\n\nconst isValidIPv4String = ip =>\n isNotNil(ip) && Validator.isValidIPv4String(ip)[0];\n\nconst isValidIPv6String = ip =>\n isNotNil(ip) && Validator.isValidIPv6String(ip)[0];\n\nconst isValidIpString = ip => isValidIPv4String(ip) || isValidIPv6String(ip);\n\nconst areIpAddressesInSameFormat = (ipStart, ipEnd) =>\n (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) ||\n (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd));\n\nconst isValidIPv4Range = (ipStart, ipEnd) => {\n const ipStartAddr = IPv4.fromDecimalDottedString(ipStart);\n const ipEndAddr = IPv4.fromDecimalDottedString(ipEnd);\n\n return ipStartAddr.isLessThanOrEquals(ipEndAddr);\n};\n\nconst isValidIPv6Range = (ipStart, ipEnd) => {\n const ipStartAddr = IPv6.fromString(ipStart);\n const ipEndAddr = IPv6.fromString(ipEnd);\n\n return ipStartAddr.isLessThanOrEquals(ipEndAddr);\n};\n\nconst isValidIPRange = (ipStart, ipEnd) => {\n if (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) {\n return isValidIPv4Range(ipStart, ipEnd);\n }\n\n if (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd)) {\n return isValidIPv6Range(ipStart, ipEnd);\n }\n\n return false;\n};\n\nyup.addMethod(yup.string, \"validIp\", function (errorMessage) {\n return this.test(\"valid-ip\", errorMessage, function (value) {\n if (isNil(value)) {\n return this;\n }\n\n const isValidIp = isValidIpString(value);\n\n return (\n isValidIp || this.createError({ path: this.path, message: errorMessage })\n );\n });\n});\n\nexport const getIpRestrictionValidationSchema = () =>\n yup.object().shape({\n ipStart: yup\n .string()\n .validIp(t(\"neetoMolecules.ipRestriction.validations.invalidIp\"))\n .required(t(\"neetoMolecules.ipRestriction.validations.ipStartRequired\")),\n ipEnd: yup\n .string()\n .validIp(t(\"neetoMolecules.ipRestriction.validations.invalidIp\"))\n .when(\"ipStart\", (ipStart, schema) =>\n schema.test({\n test: ipEnd => areIpAddressesInSameFormat(ipStart, ipEnd),\n message: t(\n \"neetoMolecules.ipRestriction.validations.eitherIpv4OrIpv6\"\n ),\n })\n )\n .when(\"ipStart\", (ipStart, schema) =>\n schema.test({\n test: ipEnd => isValidIPRange(ipStart, ipEnd),\n message: t(\n \"neetoMolecules.ipRestriction.validations.ipEndGreaterThanIpStart\"\n ),\n })\n )\n .required(t(\"neetoMolecules.ipRestriction.validations.ipEndRequired\")),\n addressType: yup\n .object()\n .shape({\n value: yup.string().required(),\n label: yup.string().required(),\n })\n .nullable()\n .required(\n t(\"neetoMolecules.ipRestriction.validations.addressTypeRequired\")\n ),\n });\n\nexport const humanizeIpAddressFormat = addressFormat => {\n const addressFormats = { ipv4: \"IPv4\", ipv6: \"IPv6\" };\n\n return addressFormats[addressFormat];\n};\n\nexport const buildInitialValue = (isIpRestrictionEnabled, allowedIpRanges) => ({\n ipRestriction: isIpRestrictionEnabled,\n allowedIpRanges: buildAllowedIpRangesFormData(allowedIpRanges),\n});\n\nexport const buildAllowedIpRangesFormData = allowedIpRanges =>\n allowedIpRanges?.map(allowedIpRange =>\n assoc(\n \"addressType\",\n toLabelAndValue(allowedIpRange.addressType),\n allowedIpRange\n )\n );\n\nexport const buildIpRestrictionPayload = values => {\n const allowedIpRangesWithTransformedAddressType = values.allowedIpRanges.map(\n allowedIpRange =>\n assoc(\"addressType\", allowedIpRange.addressType.value, allowedIpRange)\n );\n\n return {\n isIpRestrictionEnabled: values.ipRestriction,\n allowedIpRanges: allowedIpRangesWithTransformedAddressType,\n };\n};\n","import { t } from \"i18next\";\nimport * as yup from \"yup\";\n\nimport { getIpRestrictionValidationSchema } from \"./utils\";\n\nexport const IP_RESTRICTIONS_ENGINE_BASE_URL = \"/ip_restrictions/api/v1\";\n\nexport const QUERY_KEYS = {\n IP_RESTRICTION: \"IP_RESTRICTION\",\n ALLOWED_IP_RANGES: \"ALLOWED_IP_RANGES\",\n CURRENT_IP: \"CURRENT_IP\",\n};\n\nexport const TRUNCATE_LENGTH = 18;\n\nexport const ADDRESS_TYPE_SELECT_OPTIONS = [\n { label: t(\"neetoMolecules.ipRestriction.ipv4\"), value: \"ipv4\" },\n { label: t(\"neetoMolecules.ipRestriction.ipv6\"), value: \"ipv6\" },\n];\n\nexport const INITIAL_VALUES = {\n ipStart: \"\",\n ipEnd: \"\",\n addressType: ADDRESS_TYPE_SELECT_OPTIONS[0].value,\n};\n\nexport const VALIDATION_SCHEMA = yup.object().shape({\n ipRestriction: yup.boolean(),\n allowedIpRanges: yup.array().of(getIpRestrictionValidationSchema()),\n});\n\nexport const NEW_ALLOWED_IP_RANGE = {\n ipStart: \"\",\n ipEnd: \"\",\n addressType: null,\n createdAt: new Date().toISOString(),\n};\n","import withT from \"neetocommons/react-utils/withT\";\nimport { Delete } from \"neetoicons\";\nimport { Button } from \"neetoui\";\nimport { Input, Select } from \"neetoui/formik\";\n\nimport { ADDRESS_TYPE_SELECT_OPTIONS } from \"../constants\";\n\nconst AllowedIpRange = withT(({ t, index, arrayHelpers }) => (\n <div className=\"flex items-start gap-3\">\n <div className=\"grid flex-grow grid-cols-1 gap-3 md:grid-cols-3\">\n <Input\n className=\"text-start\"\n data-cy=\"ip-start-text-field\"\n label={t(\"neetoMolecules.ipRestriction.ipStart\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.ipStart`}\n placeholder={t(\"neetoMolecules.ipRestriction.ipStart\")}\n />\n <Input\n className=\"text-start\"\n data-cy=\"ip-end-text-field\"\n label={t(\"neetoMolecules.ipRestriction.ipEnd\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.ipEnd`}\n placeholder={t(\"neetoMolecules.ipRestriction.ipEnd\")}\n />\n <Select\n className=\"text-start\"\n data-testid=\"address-type-select-field\"\n label={t(\"neetoMolecules.ipRestriction.type\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.addressType`}\n options={ADDRESS_TYPE_SELECT_OPTIONS}\n />\n </div>\n <div className=\"flex flex-shrink-0 justify-center md:min-w-14\">\n <Button\n className=\"mt-5 md:mt-0\"\n data-cy=\"allowed-ip-range-delete-button\"\n data-testid=\"allowed-ip-range-delete-btn\"\n icon={Delete}\n style=\"text\"\n tooltipProps={{\n content: t(\"neetoMolecules.common.actions.discard\"),\n position: \"top\",\n touch: [\"hold\", 500],\n }}\n onClick={() => arrayHelpers.remove(index)}\n />\n </div>\n </div>\n));\n\nexport default AllowedIpRange;\n","import { memo } from \"react\";\n\nimport { FieldArray } from \"formik\";\nimport withT from \"neetocommons/react-utils/withT\";\nimport { Plus } from \"neetoicons\";\nimport { Button, Typography } from \"neetoui\";\n\nimport AllowedIpRange from \"./AllowedIpRange\";\n\nimport { NEW_ALLOWED_IP_RANGE } from \"../constants\";\n\nconst AllowedIpRanges = withT(({ t }) => (\n <div className=\"flex flex-col gap-y-5\" data-cy=\"allowed-ip-range-container\">\n <Typography data-cy=\"allowed-ip-range-heading\" style=\"h4\">\n {t(\"neetoMolecules.ipRestriction.allowedIpRangeTitle\")}\n </Typography>\n <div className=\"flex flex-col gap-y-3\">\n <div className=\"hidden gap-3 md:flex\">\n <div className=\"grid flex-grow grid-cols-3 gap-3\">\n <Typography className=\"neeto-ui-text-gray-700 uppercase\" style=\"h6\">\n {t(\"neetoMolecules.ipRestriction.ipStart\")}*\n </Typography>\n <Typography className=\"neeto-ui-text-gray-700 uppercase\" style=\"h6\">\n {t(\"neetoMolecules.ipRestriction.ipEnd\")}*\n </Typography>\n <Typography className=\"neeto-ui-text-gray-700 uppercase\" style=\"h6\">\n {t(\"neetoMolecules.ipRestriction.type\")}*\n </Typography>\n </div>\n <div className=\"min-w-14 flex-shrink-0\">\n <Typography\n className=\"neeto-ui-text-gray-700 text-center uppercase\"\n style=\"h6\"\n >\n {t(\"neetoMolecules.ipRestriction.actions\")}\n </Typography>\n </div>\n </div>\n <div className=\"flex w-full flex-col gap-y-6 md:gap-y-4\">\n <FieldArray name=\"allowedIpRanges\">\n {arrayHelpers => (\n <>\n {arrayHelpers.form.values.allowedIpRanges.map(\n (allowedIpRange, index) => (\n <div\n className=\"neeto-ui-border-gray-300 w-full border-b pb-6 last:border-none last:pb-0 md:border-none md:pb-0\"\n key={index}\n >\n <AllowedIpRange\n {...{ allowedIpRange, arrayHelpers, index }}\n key={allowedIpRange.createdAt}\n />\n </div>\n )\n )}\n <Button\n className=\"md:mt-2\"\n data-cy=\"add-allowed-ip-range-button\"\n icon={Plus}\n iconPosition=\"left\"\n label={t(\"neetoMolecules.ipRestriction.addNew\")}\n style=\"link\"\n onClick={() => arrayHelpers.push(NEW_ALLOWED_IP_RANGE)}\n />\n </>\n )}\n </FieldArray>\n </div>\n </div>\n </div>\n));\n\nexport default memo(AllowedIpRanges);\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst show = params =>\n axios.get(`${IP_RESTRICTIONS_ENGINE_BASE_URL}/current_ip`, { params });\n\nconst currentIpApi = { show };\n\nexport default currentIpApi;\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport currentIpApi from \"../../apis/current_ip\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { CURRENT_IP } = QUERY_KEYS;\n\nconst useShowCurrentIp = () =>\n useQuery({\n queryKey: [CURRENT_IP],\n queryFn: () => currentIpApi.show(),\n });\n\nexport { useShowCurrentIp };\n","import { memo } from \"react\";\n\nimport { Typography } from \"neetoui\";\nimport { Trans } from \"react-i18next\";\n\nimport { useShowCurrentIp } from \"./hooks/reactQuery/useCurrentIp\";\n\nconst CurrentIp = () => {\n const { data, isLoading } = useShowCurrentIp();\n\n return (\n <div\n className=\"flex flex-wrap items-baseline gap-1\"\n data-cy=\"current-ip-container\"\n >\n <Typography>\n <Trans\n i18nKey=\"neetoMolecules.ipRestriction.currentIpMessage\"\n values={{ ip: isLoading ? \"...\" : data.ip }}\n />\n </Typography>\n </div>\n );\n};\n\nexport default memo(CurrentIp);\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst allowedIpRangesUrl = `${IP_RESTRICTIONS_ENGINE_BASE_URL}/allowed_ips`;\n\nconst fetch = () => axios.get(allowedIpRangesUrl);\n\nconst create = payload =>\n axios.post(allowedIpRangesUrl, { allowedIpRange: payload });\n\nconst destroy = id => axios.delete(`${allowedIpRangesUrl}/${id}`);\n\nconst update = ({ id, payload }) =>\n axios.patch(`${allowedIpRangesUrl}/${id}`, {\n allowedIpRange: payload,\n });\n\nconst allowedIpRangesApi = { fetch, create, destroy, update };\n\nexport default allowedIpRangesApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport useMutationWithInvalidation from \"neetocommons/react-utils/useMutationWithInvalidation\";\n\nimport allowedIpRangesApi from \"../../apis/allowed_ip_ranges\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { ALLOWED_IP_RANGES } = QUERY_KEYS;\n\nconst useFetchAllowedIpRanges = options =>\n useQuery({\n queryKey: [ALLOWED_IP_RANGES],\n queryFn: () => allowedIpRangesApi.fetch(),\n ...options,\n });\n\nconst useCreateAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.create, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nconst useDestroyAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.destroy, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nconst useUpdateAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.update, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nexport {\n useFetchAllowedIpRanges,\n useCreateAllowedIpRanges,\n useDestroyAllowedIpRanges,\n useUpdateAllowedIpRanges,\n};\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst ipRestrictionUrl = `${IP_RESTRICTIONS_ENGINE_BASE_URL}/ip_restriction`;\n\nconst update = params =>\n axios.patch(ipRestrictionUrl, { ipRestriction: params });\n\nconst show = () => axios.get(ipRestrictionUrl);\n\nconst ipRestrictionApi = { update, show };\n\nexport default ipRestrictionApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport useMutationWithInvalidation from \"neetocommons/react-utils/useMutationWithInvalidation\";\n\nimport ipRestrictionApi from \"../../apis/ip_restriction\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { IP_RESTRICTION, ALLOWED_IP_RANGES } = QUERY_KEYS;\n\nconst useShowIpRestriction = () =>\n useQuery({\n queryKey: [IP_RESTRICTION],\n queryFn: () => ipRestrictionApi.show(),\n });\n\nconst useUpdateIpRestriction = () =>\n useMutationWithInvalidation(ipRestrictionApi.update, {\n keysToInvalidate: [[IP_RESTRICTION], [ALLOWED_IP_RANGES]],\n });\n\nexport { useShowIpRestriction, useUpdateIpRestriction };\n","import { memo, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport { Typography, Alert, Callout, Button, Spinner } from \"neetoui\";\nimport {\n Form as NeetoUIForm,\n Switch,\n Button as FormikButton,\n BlockNavigation,\n} from \"neetoui/formik\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport CardLayout from \"components/CardLayout\";\n\nimport AllowedIpRanges from \"./AllowedIpRanges\";\nimport { VALIDATION_SCHEMA } from \"./constants\";\nimport CurrentIp from \"./CurrentIp\";\nimport { useFetchAllowedIpRanges } from \"./hooks/reactQuery/useAllowedIpRanges\";\nimport {\n useShowIpRestriction,\n useUpdateIpRestriction,\n} from \"./hooks/reactQuery/useIpRestrictions\";\nimport \"./IpRestriction.scss\";\nimport { buildInitialValue, buildIpRestrictionPayload } from \"./utils\";\n\nconst IpRestriction = () => {\n const { t } = useTranslation();\n const [isAlertOpen, setIsAlertOpen] = useState(false);\n\n const {\n data: { isIpRestrictionEnabled } = {},\n isLoading: isFetchingIpRestriction,\n } = useShowIpRestriction();\n\n const {\n data: allowedIpRanges,\n isLoading: isFetchingAllowedIpRanges,\n isRefetching,\n } = useFetchAllowedIpRanges({ enabled: isIpRestrictionEnabled });\n\n const { mutate: updateIpRestriction, isPending: isUpdating } =\n useUpdateIpRestriction();\n\n if (isFetchingIpRestriction || isFetchingAllowedIpRanges || isRefetching) {\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n <Spinner />\n </div>\n );\n }\n\n const handleSubmit = (values, formikBag) => {\n if (values.ipRestriction) setIsAlertOpen(true);\n else handleUpdateIpRestriction(values, formikBag);\n };\n\n const handleCloseAlert = setSubmitting => {\n setIsAlertOpen(false);\n setSubmitting(false);\n };\n\n const handleUpdateIpRestriction = (values, { setSubmitting, resetForm }) => {\n updateIpRestriction(buildIpRestrictionPayload(values), {\n onSuccess: () => {\n setIsAlertOpen(false);\n setSubmitting(false);\n resetForm({ values });\n },\n onError: () => {\n setIsAlertOpen(false);\n setSubmitting(false);\n },\n });\n };\n\n return (\n <NeetoUIForm\n className=\"w-full\"\n formikProps={{\n initialValues: buildInitialValue(\n isIpRestrictionEnabled,\n allowedIpRanges\n ),\n validationSchema: VALIDATION_SCHEMA,\n validateOnBlur: true,\n enableReinitialize: true,\n onSubmit: handleSubmit,\n }}\n >\n {({ values, dirty, setFieldValue, resetForm, setSubmitting }) => (\n <CardLayout\n actionBlock={\n <div className=\"flex flex-wrap items-center gap-2\">\n <FormikButton\n data-cy=\"ip-restriction-save-changes\"\n data-testid=\"save-changes-button\"\n loading={isUpdating}\n type=\"submit\"\n >\n {t(\"neetoMolecules.common.actions.saveChanges\")}\n </FormikButton>\n <Button\n data-cy=\"ip-restriction-reset-btn\"\n disabled={!dirty}\n label={t(\"neetoMolecules.common.actions.reset\")}\n style=\"secondary\"\n type=\"reset\"\n onClick={resetForm}\n />\n {dirty && (\n <Typography className=\"neeto-ui-text-error-500\" style=\"body2\">\n {t(\"neetoMolecules.ipRestriction.validations.unsavedChanges\")}\n </Typography>\n )}\n </div>\n }\n >\n <BlockNavigation />\n <div\n className={classnames(\"flex flex-col gap-y-2\", {\n \"pb-6\": values.ipRestriction,\n })}\n >\n <Switch\n checked={values.ipRestriction}\n className=\"flex-grow-0\"\n data-cy=\"enable-ip-restriction-switch\"\n disabled={isFetchingIpRestriction || isUpdating}\n id=\"ipRestriction\"\n name=\"ipRestriction\"\n label={\n <Typography style=\"h3\">\n {t(\"neetoMolecules.ipRestriction.switchLabel\")}\n </Typography>\n }\n onChange={() =>\n setFieldValue(\"ipRestriction\", !values.ipRestriction)\n }\n />\n <Typography data-cy=\"ip-restriction-description\" style=\"body2\">\n {t(\"neetoMolecules.ipRestriction.description\")}\n </Typography>\n </div>\n {values.ipRestriction && (\n <div className=\"neeto-ui-border-gray-300 flex w-full flex-col gap-y-6 border-t pt-6\">\n <CurrentIp />\n <AllowedIpRanges />\n <Callout style=\"warning\">\n <div className=\"block whitespace-pre-wrap py-1\">\n <Trans i18nKey=\"neetoMolecules.ipRestriction.warningMessage\" />\n </div>\n </Callout>\n </div>\n )}\n <Alert\n isOpen={isAlertOpen}\n isSubmitting={isUpdating}\n title={t(\"neetoMolecules.ipRestriction.enableAlert.title\")}\n message={\n <Trans i18nKey=\"neetoMolecules.ipRestriction.enableAlert.message\" />\n }\n submitButtonLabel={t(\n \"neetoMolecules.ipRestriction.enableAlert.submitButtonLabel\"\n )}\n onClose={() => handleCloseAlert(setSubmitting)}\n onSubmit={() =>\n handleUpdateIpRestriction(values, { setSubmitting, resetForm })\n }\n />\n </CardLayout>\n )}\n </NeetoUIForm>\n );\n};\n\nexport default memo(IpRestriction);\n"],"names":["require$$0","require$$1","Validator_1","require$$2","Validator","Hexadecatet_1","Octet_1","BinaryUtils_1","require$$3","HexadecimalUtils_1","require$$4","require$$5","IPNumber_1","Prefix_1","this","require$$6","require$$7","require$$8","require$$9","require$$10","toLabelAndValue","value","label","humanizeIpAddressFormat","isValidIPv4String","ip","isNotNil","isValidIPv6String","isValidIpString","areIpAddressesInSameFormat","ipStart","ipEnd","isValidIPv4Range","ipStartAddr","IPv4","fromDecimalDottedString","ipEndAddr","isLessThanOrEquals","isValidIPv6Range","IPv6","fromString","isValidIPRange","yup","addMethod","string","errorMessage","test","isNil","isValidIp","createError","path","message","getIpRestrictionValidationSchema","object","shape","validIp","t","required","when","schema","addressType","nullable","addressFormat","addressFormats","ipv4","ipv6","buildInitialValue","isIpRestrictionEnabled","allowedIpRanges","ipRestriction","buildAllowedIpRangesFormData","map","allowedIpRange","assoc","buildIpRestrictionPayload","values","allowedIpRangesWithTransformedAddressType","IP_RESTRICTIONS_ENGINE_BASE_URL","QUERY_KEYS","IP_RESTRICTION","ALLOWED_IP_RANGES","CURRENT_IP","ADDRESS_TYPE_SELECT_OPTIONS","VALIDATION_SCHEMA","array","of","NEW_ALLOWED_IP_RANGE","createdAt","Date","toISOString","AllowedIpRange","withT","_ref","index","arrayHelpers","_jsxs","className","children","_jsx","Input","labelProps","name","concat","placeholder","Select","options","Button","icon","Delete","style","tooltipProps","content","position","touch","onClick","remove","AllowedIpRanges","Typography","FieldArray","_Fragment","form","_createElement","key","Plus","iconPosition","push","memo","show","params","axios","get","currentIpApi","useShowCurrentIp","useQuery","queryKey","queryFn","CurrentIp","_useShowCurrentIp","data","isLoading","Trans","i18nKey","allowedIpRangesUrl","fetch","create","payload","post","destroy","id","update","patch","allowedIpRangesApi","useFetchAllowedIpRanges","_objectSpread","ipRestrictionUrl","ipRestrictionApi","useShowIpRestriction","useUpdateIpRestriction","useMutationWithInvalidation","keysToInvalidate","IpRestriction","_useTranslation","useTranslation","_useState","useState","_useState2","_slicedToArray","isAlertOpen","setIsAlertOpen","_useShowIpRestriction","_useShowIpRestriction2","_useShowIpRestriction3","isFetchingIpRestriction","_useFetchAllowedIpRan","enabled","isFetchingAllowedIpRanges","isRefetching","_useUpdateIpRestricti","updateIpRestriction","mutate","isUpdating","isPending","Spinner","handleSubmit","formikBag","handleUpdateIpRestriction","handleCloseAlert","setSubmitting","resetForm","onSuccess","onError","NeetoUIForm","formikProps","initialValues","validationSchema","validateOnBlur","enableReinitialize","onSubmit","_ref2","dirty","setFieldValue","CardLayout","actionBlock","FormikButton","loading","type","disabled","BlockNavigation","classnames","Switch","checked","onChange","Callout","Alert","isOpen","isSubmitting","title","submitButtonLabel","onClose"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}
|
|
1
|
+
{"version":3,"file":"IpRestriction.js","sources":["../node_modules/ip-num/dist/src/BinaryUtils.js","../node_modules/ip-num/dist/src/IPv6Utils.js","../node_modules/ip-num/dist/src/HexadecimalUtils.js","../node_modules/ip-num/dist/src/Validator.js","../node_modules/ip-num/dist/src/Hexadecatet.js","../node_modules/ip-num/dist/src/Octet.js","../node_modules/ip-num/dist/src/IPNumber.js","../node_modules/ip-num/dist/src/IPNumType.js","../node_modules/ip-num/dist/src/Prefix.js","../node_modules/ip-num/dist/src/IPRange.js","../node_modules/ip-num/dist/src/IPPool.js","../node_modules/ip-num/dist/src/index.js","../src/components/IpRestriction/utils.js","../src/components/IpRestriction/constants.js","../src/components/IpRestriction/AllowedIpRanges/AllowedIpRange.jsx","../src/components/IpRestriction/AllowedIpRanges/index.jsx","../src/components/IpRestriction/apis/current_ip.js","../src/components/IpRestriction/hooks/reactQuery/useCurrentIp.js","../src/components/IpRestriction/CurrentIp.jsx","../src/components/IpRestriction/apis/allowed_ip_ranges.js","../src/components/IpRestriction/hooks/reactQuery/useAllowedIpRanges.js","../src/components/IpRestriction/apis/ip_restriction.js","../src/components/IpRestriction/hooks/reactQuery/useIpRestrictions.js","../src/components/IpRestriction/index.jsx"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.matchingBitCount = exports.intLog2 = exports.cidrPrefixToMaskBinaryString = exports.leftPadWithZeroBit = exports.dottedDecimalNotationToBinaryString = exports.parseBinaryStringToBigInt = exports.decimalNumberToOctetString = exports.numberToBinaryString = void 0;\n/**\n * Converts a decimal number to binary string\n *\n * @param num number to parse\n * @returns {string} the binary string representation of number\n */\nlet numberToBinaryString = (num) => {\n return num.toString(2);\n};\nexports.numberToBinaryString = numberToBinaryString;\n/**\n * Converts a decimal number to binary octet (8 bit) string. If needed the octet will be padded with zeros\n * to make it up to 8 bits\n *\n * @param {number} num to convert to octet string\n * @returns {string} the octet string representation of given number\n */\nlet decimalNumberToOctetString = (num) => {\n let binaryString = (0, exports.numberToBinaryString)(num);\n let length = binaryString.length;\n if (length > 8) {\n throw new Error(\"Given decimal in binary contains digits greater than an octet\");\n }\n return (0, exports.leftPadWithZeroBit)(binaryString, 8);\n};\nexports.decimalNumberToOctetString = decimalNumberToOctetString;\n/**\n * Parses number in binary to number in BigInt\n *\n * @param num binary number in string to parse\n * @returns {number} binary number in BigInt\n */\nlet parseBinaryStringToBigInt = (num) => {\n return BigInt(`0b${num}`);\n};\nexports.parseBinaryStringToBigInt = parseBinaryStringToBigInt;\n/**\n * Given an IPv4 number in dot-decimal notated string, e.g 192.168.0.1 converts it to\n * binary string, e.g. '11000000101010000000000000000001'\n *\n * @param dottedDecimal IPv4 string in dot-decimal notation\n * @returns {string} the binary value of the given ipv4 number in string\n */\nlet dottedDecimalNotationToBinaryString = (dottedDecimal) => {\n let stringOctets = dottedDecimal.split(\".\");\n return stringOctets.reduce((binaryAsString, octet) => {\n return binaryAsString.concat((0, exports.decimalNumberToOctetString)(parseInt(octet)));\n }, '');\n};\nexports.dottedDecimalNotationToBinaryString = dottedDecimalNotationToBinaryString;\n/**\n * Given a binary string, adds a number of zero to the left until string is as long as the given string length\n * @param {string} binaryString the string to pad\n * @param {number} finalStringLength the final length of string after padding\n * @returns {string}\n */\nlet leftPadWithZeroBit = (binaryString, finalStringLength) => {\n if (binaryString.length > finalStringLength) {\n throw new Error(`Given string is already longer than given final length after padding: ${finalStringLength}`);\n }\n return \"0\".repeat(finalStringLength - binaryString.length).concat(binaryString);\n};\nexports.leftPadWithZeroBit = leftPadWithZeroBit;\n/**\n * Given the prefix portion of a cidr notation and the type of IP number, returns the mask in binary string\n *\n * @param {number} cidrPrefix the prefix part of a cidr notation\n * @param {IPNumType.IPv4 | IPNumType.IPv6} ipType the type of the ip number in the range the cidr represents\n */\nlet cidrPrefixToMaskBinaryString = (cidrPrefix, ipType) => {\n let cidrUpperValue;\n if (ipType == \"IPv4\" /* IPNumType.IPv4 */) {\n cidrUpperValue = 32;\n }\n else {\n cidrUpperValue = 128;\n }\n if (cidrPrefix > cidrUpperValue)\n throw Error(`Value is greater than ${cidrUpperValue}`);\n let onBits = '1'.repeat(cidrPrefix);\n let offBits = '0'.repeat(cidrUpperValue - cidrPrefix);\n return `${onBits}${offBits}`;\n};\nexports.cidrPrefixToMaskBinaryString = cidrPrefixToMaskBinaryString;\n/**\n * Calculates the log, to base 2 of given number.\n *\n * @throws Error if number cannot be converted to log base 2\n * @param givenNumber the number to calculate log base 2\n * @return the log base 2 of given number\n */\nlet intLog2 = (givenNumber) => {\n let result = 0;\n while (givenNumber % 2n === 0n) {\n if (givenNumber === 2n) {\n result++;\n break;\n }\n givenNumber = givenNumber >> 1n;\n if (givenNumber % 2n !== 0n) {\n result = 0;\n break;\n }\n result++;\n }\n if (result == 0) {\n throw new Error(`The value of log2 for ${givenNumber.toString()} is not an integer`);\n }\n return result;\n};\nexports.intLog2 = intLog2;\n/**\n * Starting from the most significant bit (from left) returns the number of first bits from both string that are equal\n * @param firstBinaryString first binary string\n * @param secondBinaryString second binary string\n */\nlet matchingBitCount = (firstBinaryString, secondBinaryString) => {\n let longerString;\n let otherString;\n if (firstBinaryString.length >= secondBinaryString.length) {\n longerString = firstBinaryString;\n otherString = secondBinaryString;\n }\n else {\n longerString = secondBinaryString;\n otherString = firstBinaryString;\n }\n let count = 0;\n for (; count < longerString.length; count++) {\n if (longerString.charAt(count) === otherString.charAt(count)) {\n continue;\n }\n break;\n }\n return count;\n};\nexports.matchingBitCount = matchingBitCount;\n//# sourceMappingURL=BinaryUtils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collapseIPv6Number = exports.expandIPv6Number = void 0;\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst Validator_1 = require(\"./Validator\");\nlet extractPrefix = (ipv6String) => {\n return ipv6String.includes(\"/\") ? `/${ipv6String.split(\"/\")[1]}` : \"\";\n};\nlet expandIPv6Number = (ipv6String) => {\n let expandWithZero = (hexadecimalArray) => {\n let paddedArray = hexadecimalArray.map((hexadecimal) => {\n return (0, BinaryUtils_1.leftPadWithZeroBit)(hexadecimal, 4);\n });\n return paddedArray.join(\":\");\n };\n let expandDoubleColon = (gapCount) => {\n let pads = [];\n for (let count = 0; count < gapCount; count++) {\n pads.push(\"0000\");\n }\n return pads.join(\":\");\n };\n if (/(:){3,}/.test(ipv6String))\n throw \"given IPv6 contains consecutive : more than two\";\n const prefix = extractPrefix(ipv6String);\n if (ipv6String.includes(\"/\")) {\n ipv6String = ipv6String.split(\"/\")[0];\n }\n let isValid = Validator_1.Validator.IPV6_PATTERN.test(ipv6String);\n if (!isValid) {\n throw Error(Validator_1.Validator.invalidIPv6PatternMessage);\n }\n if (ipv6String.includes(\"::\")) {\n let split = ipv6String.split(\"::\");\n let leftPortion = split[0];\n let rightPortion = split[1];\n let leftPortionSplit = leftPortion.split(\":\").filter(hexadecimal => { return hexadecimal !== \"\"; });\n let rightPortionSplit = rightPortion.split(\":\").filter(hexadecimal => { return hexadecimal !== \"\"; });\n let doublePortion = expandDoubleColon(8 - (leftPortionSplit.length + rightPortionSplit.length));\n let leftString = expandWithZero(leftPortionSplit);\n if (leftString !== \"\") {\n leftString += \":\";\n }\n let rightString = expandWithZero(rightPortionSplit);\n if (rightString !== \"\") {\n rightString = \":\" + rightString;\n }\n return `${leftString}${doublePortion}${rightString}${prefix}`;\n }\n else {\n return `${expandWithZero(ipv6String.split(\":\"))}${prefix}`;\n }\n};\nexports.expandIPv6Number = expandIPv6Number;\n// Helper function to shorten hexadecatets\nconst shortenHexadecatet = (hex) => {\n // Input hex is expected to be like \"0000\", \"0DB8\", \"001A\" from expanded form\n const withoutLeadingZero = hex.replace(/^0+/, '');\n // If hex was \"0000\", withoutLeadingZero is \"\", so return \"0\"\n // Otherwise, return the string without leading zeros.\n return withoutLeadingZero === '' ? '0' : withoutLeadingZero;\n};\nlet collapseIPv6Number = (ipv6String) => {\n const originalPrefix = extractPrefix(ipv6String);\n const processedIPv6String = ipv6String.includes(\"/\") ? ipv6String.split(\"/\")[0] : ipv6String;\n let expandedIPv6 = \"\";\n try {\n // Expand to full 8 segments, no prefix internally for processing\n let tempExpanded = (0, exports.expandIPv6Number)(processedIPv6String);\n if (tempExpanded.includes(\"/\")) {\n expandedIPv6 = tempExpanded.split(\"/\")[0];\n }\n else {\n expandedIPv6 = tempExpanded;\n }\n }\n catch (e) {\n // Propagate error if expansion fails (e.g. invalid IPv6 format)\n throw e;\n }\n let hexadecatets = expandedIPv6.split(\":\");\n if (hexadecatets.length !== 8) {\n // This case should ideally be prevented by expandIPv6Number's validation or structure.\n // If expandIPv6Number guarantees 8 segments or throws, this might not be strictly needed.\n // However, as a safeguard:\n throw new Error(`Invalid IPv6 structure after expansion: ${expandedIPv6}. Expected 8 segments.`);\n }\n let zeroSequences = [];\n let currentSequenceStart = -1;\n let currentSequenceLength = 0;\n for (let i = 0; i < 8; i++) {\n // Segments from expandIPv6Number are 4-char 0-padded, e.g., \"0000\"\n if (hexadecatets[i] === \"0000\") {\n if (currentSequenceStart === -1) {\n currentSequenceStart = i;\n }\n currentSequenceLength++;\n }\n else {\n if (currentSequenceLength > 0) {\n zeroSequences.push({ start: currentSequenceStart, length: currentSequenceLength });\n }\n currentSequenceStart = -1;\n currentSequenceLength = 0;\n }\n }\n if (currentSequenceLength > 0) { // Capture any trailing zero sequence\n zeroSequences.push({ start: currentSequenceStart, length: currentSequenceLength });\n }\n if (zeroSequences.length === 0) {\n // No zero segments at all, just shorten each hexadecatet\n return hexadecatets.map(shortenHexadecatet).join(\":\") + originalPrefix;\n }\n // Sort sequences: longest first, then earliest start first\n zeroSequences.sort((a, b) => {\n if (b.length !== a.length) {\n return b.length - a.length;\n }\n return a.start - b.start;\n });\n const bestSequence = zeroSequences[0];\n if (bestSequence.length === 8) { // All 8 segments are zero\n return \"::\" + originalPrefix;\n }\n // RFC 5952: \"The symbol \"::\" MUST NOT be used to shorten just one 16-bit 0 field.\"\n // So, length must be > 1 for \"::\" compression.\n if (bestSequence.length < 2) {\n // No \"::\" compression is applied (e.g. \"1:2:0:4:5:6:7:8\")\n return hexadecatets.map(shortenHexadecatet).join(\":\") + originalPrefix;\n }\n // Apply \"::\" compression using the bestSequence\n let leftPartSegments = hexadecatets.slice(0, bestSequence.start);\n let rightPartSegments = hexadecatets.slice(bestSequence.start + bestSequence.length);\n let leftString = leftPartSegments.map(shortenHexadecatet).join(\":\");\n let rightString = rightPartSegments.map(shortenHexadecatet).join(\":\");\n let finalStr = \"\";\n if (bestSequence.start === 0) { // Compression at the beginning: \"::...\"\n finalStr = \"::\" + rightString;\n }\n else if (bestSequence.start + bestSequence.length === 8) { // Compression at the end: \"...::\"\n // Ensure that if leftString is empty (which shouldn't happen here if start > 0), it's handled.\n // However, if bestSequence.start > 0, leftPartSegments won't be empty unless bestSequence.start is 0.\n finalStr = leftString + \"::\";\n }\n else { // Compression in the middle: \"...::...\"\n finalStr = leftString + \"::\" + rightString;\n }\n return finalStr + originalPrefix;\n};\nexports.collapseIPv6Number = collapseIPv6Number;\n//# sourceMappingURL=IPv6Utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hexadectetNotationToBinaryString = exports.binaryStringToHexadecimalString = exports.colonHexadecimalNotationToBinaryString = exports.hexadecimalStringToHexadecatetString = exports.hexadecimalStringToBinaryString = exports.bigIntToHexadecimalString = void 0;\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\n/**\n * Converts a given bigint number to a hexadecimal string\n * @param num the bigint number\n * @returns {string} the hexadeciaml string\n */\nlet bigIntToHexadecimalString = (num) => {\n return num.toString(16);\n};\nexports.bigIntToHexadecimalString = bigIntToHexadecimalString;\n/**\n * Converts a number in hexadecimal (base 16) to binary string\n * @param {string} hexadecimalString the number in base 16\n * @returns {string} the number converted to base 2\n */\nlet hexadecimalStringToBinaryString = (hexadecimalString) => {\n let inDecimal = BigInt(`0x${hexadecimalString}`);\n return inDecimal.toString(2);\n};\nexports.hexadecimalStringToBinaryString = hexadecimalStringToBinaryString;\n/**\n * Converts a number in hexadecimal (base 16) to binary hexadecatet string.\n * This means the bits in the output cannot be more than 16\n *\n * @param hexadecimalString {string} the number converted to binary hexadecatet string\n */\nlet hexadecimalStringToHexadecatetString = (hexadecimalString) => {\n let binaryString = (0, exports.hexadecimalStringToBinaryString)(hexadecimalString);\n let length = binaryString.length;\n if (length > 16) {\n throw new Error(\"Given decimal in binary contains digits greater than an Hexadecatet\");\n }\n return (0, BinaryUtils_1.leftPadWithZeroBit)(binaryString, 16);\n};\nexports.hexadecimalStringToHexadecatetString = hexadecimalStringToHexadecatetString;\n/**\n * Given an IPv6 number in hexadecimal notated string, e.g 2001:0db8:0000:0000:0000:0000:0000:0000 converts it to\n * binary string\n *\n * @param hexadecimalString IPv6 string\n * @returns {string} the binary value of the given ipv6 number in string\n */\nlet colonHexadecimalNotationToBinaryString = (hexadecimalString) => {\n let expandedIPv6 = (0, IPv6Utils_1.expandIPv6Number)(hexadecimalString);\n let stringHexadecimal = expandedIPv6.split(\":\");\n return stringHexadecimal.reduce((binaryAsString, hexidecimal) => {\n return binaryAsString.concat((0, exports.hexadecimalStringToHexadecatetString)(hexidecimal));\n }, '');\n};\nexports.colonHexadecimalNotationToBinaryString = colonHexadecimalNotationToBinaryString;\n/**\n * Converts number in binary string to hexadecimal string\n * @param {string} num in binary string\n * @returns {string} num in hexadecimal string\n */\nlet binaryStringToHexadecimalString = (num) => {\n // first convert to binary string to decimal (big Integer)\n let inDecimal = BigInt(`0b${num}`);\n return inDecimal.toString(16);\n};\nexports.binaryStringToHexadecimalString = binaryStringToHexadecimalString;\n/**\n * Converts a given IPv6 number expressed in the hexadecimal string notation into a 16 bit binary number in string\n * @param {string} hexadectetString the IPv6 number\n * @returns {string} the IPv6 number converted to binary string\n */\nlet hexadectetNotationToBinaryString = (hexadectetString) => {\n let expand = (0, IPv6Utils_1.expandIPv6Number)(hexadectetString);\n let hexadecimals = expand.split(\":\");\n return hexadecimals.reduce((hexadecimalAsString, hexavalue) => {\n return hexadecimalAsString.concat((0, BinaryUtils_1.leftPadWithZeroBit)((0, exports.hexadecimalStringToBinaryString)(hexavalue), 16));\n }, '');\n};\nexports.hexadectetNotationToBinaryString = hexadectetNotationToBinaryString;\n//# sourceMappingURL=HexadecimalUtils.js.map","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Validator = void 0;\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst BinaryUtils_2 = require(\"./BinaryUtils\");\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst HexadecimalUtils_2 = require(\"./HexadecimalUtils\");\nclass Validator {\n /**\n * Checks if given ipNumber is in between the given lower and upper bound\n *\n * @param ipNumber ipNumber to check\n * @param lowerBound lower bound\n * @param upperBound upper bound\n * @returns {boolean} true if ipNumber is between lower and upper bound\n */\n static isWithinRange(ipNumber, lowerBound, upperBound) {\n return ipNumber >= lowerBound && ipNumber <= upperBound;\n }\n /**\n * Checks if the number given is within the value considered valid for an ASN number\n *\n * @param asnNumber the asn number to validate\n * @returns {[boolean , string]} first value is true if valid ASN, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidAsnNumber(asnNumber) {\n let isValid = this.isWithinRange(asnNumber, 0n, this.THIRTY_TWO_BIT_SIZE);\n return [isValid, isValid ? [] : [Validator.invalidAsnRangeMessage]];\n }\n /**\n * Checks if the given ASN number is a 16bit ASN number\n *\n * @param {bigint} asnNumber to check if 16bit or not\n * @returns {[boolean , string]} first value is true if valid 16bit ASN, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValid16BitAsnNumber(asnNumber) {\n let isValid = Validator.isWithinRange(asnNumber, 0n, Validator.SIXTEEN_BIT_SIZE);\n return [isValid, isValid ? [] : [Validator.invalid16BitAsnRangeMessage]];\n }\n /**\n * Checks if the number given is within the value considered valid for an IPv4 number\n *\n * @param ipv4Number the asn number to validate\n * @returns {[boolean , string]} first value is true if valid IPv4 number, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv4Number(ipv4Number) {\n ipv4Number = typeof ipv4Number === \"bigint\" ? ipv4Number : BigInt(ipv4Number);\n let isValid = this.isWithinRange(ipv4Number, 0n, this.THIRTY_TWO_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv4NumberMessage]];\n }\n /**\n * Checks if the number given is within the value considered valid for an IPv6 number\n *\n * @param ipv6Number the asn number to validate\n * @returns {[boolean , string]} first value is true if valid IPv6 number, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Number(ipv6Number) {\n let isValid = this.isWithinRange(ipv6Number, 0n, this.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv6NumberMessage]];\n }\n /**\n * Checks if the number given is valid for an IPv4 octet\n *\n * @param octetNumber the octet value\n * @returns {boolean} true if valid octet, false otherwise\n */\n static isValidIPv4Octet(octetNumber) {\n let withinRange = this.isWithinRange(octetNumber, 0n, this.EIGHT_BIT_SIZE);\n return [withinRange, withinRange ? [] : [Validator.invalidOctetRangeMessage]];\n }\n /**\n * Checks if the number given is valid for an IPv6 hexadecatet\n *\n * @param {bigint} hexadecatetNum the hexadecatet value\n * @returns {[boolean , string]} first value is true if valid hexadecatet, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Hexadecatet(hexadecatetNum) {\n let isValid = this.isWithinRange(hexadecatetNum, 0n, this.SIXTEEN_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidHexadecatetMessage]];\n }\n /**\n * Checks if given string is a valid IPv4 value.\n *\n * @param {string} ipv4String the IPv4 string to validate\n * @returns {[boolean , string]} result of validation, first value represents if is valid IPv4, second value\n * contains error message if invalid IPv4\n */\n static isValidIPv4String(ipv4String) {\n let rawOctets = ipv4String.split(\".\");\n if (rawOctets.length != 4 || rawOctets.includes('')) {\n return [false, [Validator.invalidOctetCountMessage]];\n }\n let isValid = rawOctets.every(octet => {\n return Validator.isNumeric(octet) ? Validator.isValidIPv4Octet(BigInt(octet))[0] : false;\n });\n if (!isValid) {\n return [false, [Validator.invalidOctetRangeMessage]];\n }\n isValid = Validator.IPV4_PATTERN.test(ipv4String);\n return [isValid, isValid ? [] : [Validator.invalidIPv4PatternMessage]];\n }\n /**\n * Checks if given string is a valid IPv6 value.\n *\n * @param {string} ipv6String the IPv6 string to validate\n * @returns {[boolean , string]} result of validation, first value represents if is valid IPv6, second value\n * contains error message if invalid IPv6\n */\n static isValidIPv6String(ipv6String) {\n try {\n let hexadecimals = (0, IPv6Utils_1.expandIPv6Number)(ipv6String).split(\":\");\n if (hexadecimals.length != 8) {\n return [false, [Validator.invalidHexadecatetCountMessage]];\n }\n let isValid = hexadecimals.every(hexadecimal => {\n return Validator.isHexadecatet(hexadecimal) ?\n Validator.isValidIPv6Hexadecatet(BigInt(`0x${hexadecimal}`))[0] : false;\n });\n if (!isValid) {\n return [false, [Validator.invalidHexadecatetMessage]];\n }\n isValid = Validator.IPV6_PATTERN.test(ipv6String);\n return [isValid, isValid ? [] : [Validator.invalidIPv6PatternMessage]];\n }\n catch (error) {\n return [false, [String(error)]];\n }\n }\n /**\n * Checks if given value is a valid prefix value\n *\n * @param prefixValue value to check\n * @param ipNumType The type of IP number\n * @returns {(boolean|string)[]} a tuple representing if valid or not and corresponding message\n */\n static isValidPrefixValue(prefixValue, ipNumType) {\n if (\"IPv4\" /* IPNumType.IPv4 */ === ipNumType) {\n let withinRange = Validator.isWithinRange(BigInt(prefixValue), 0n, 32n);\n return [withinRange, withinRange ? [] : [Validator.invalidPrefixValueMessage]];\n }\n if (\"IPv6\" /* IPNumType.IPv6 */ === ipNumType) {\n let withinRange = Validator.isWithinRange(BigInt(prefixValue), 0n, 128n);\n return [withinRange, withinRange ? [] : [Validator.invalidPrefixValueMessage]];\n }\n return [false, [Validator.invalidInetNumType]];\n }\n /**\n * Checks if given string is a valid IPv4 mask\n *\n * @param {string} ipv4MaskString the given IPv4 mask string\n * @returns {[boolean , string]} first value is true if valid IPv4 mask string, false otherwise. Second value\n * contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv4Mask(ipv4MaskString) {\n let ipv4InBinary = (0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(ipv4MaskString);\n let isValid = Validator.IPV4_CONTIGUOUS_MASK_BIT_PATTERN.test(ipv4InBinary);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidMaskMessage]];\n }\n /**\n * Checks if given string is a valid IPv6 mask\n *\n * @param {string} ipv6MaskString the given IPv6 mask string\n * @returns {[boolean , string]} first value is true if valid IPv6 mask string, false otherwise. Second value\n * contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Mask(ipv6MaskString) {\n let ipv6InBinary = (0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(ipv6MaskString);\n let isValid = Validator.IPV6_CONTIGUOUS_MASK_BIT_PATTERN.test(ipv6InBinary);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidMaskMessage]];\n }\n /**\n * Checks if the given string is a valid IPv4 range in Cidr notation\n *\n * @param {string} ipv4RangeAsCidrString the IPv4 range in Cidr notation\n *\n * @returns {[boolean , string[]]} first value is true if valid IPv4 range in Cidr notation, false otherwise. Second\n * value contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv4CidrNotation(ipv4RangeAsCidrString) {\n let cidrComponents = ipv4RangeAsCidrString.split(\"/\");\n if (cidrComponents.length !== 2 || (cidrComponents[0].length === 0 || cidrComponents[1].length === 0)) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n let ip = cidrComponents[0];\n let range = cidrComponents[1];\n if (!/^\\d+$/.test(range)) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n if (isNaN(Number(range))) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n let [validIpv4, invalidIpv4Message] = Validator.isValidIPv4String(ip);\n let [validPrefix, invalidPrefixMessage] = Validator.isValidPrefixValue(BigInt(range), \"IPv4\" /* IPNumType.IPv4 */);\n let isValid = validIpv4 && validPrefix;\n let invalidMessage = invalidIpv4Message.concat(invalidPrefixMessage);\n return isValid ? [isValid, []] : [isValid, invalidMessage];\n }\n /**\n * Checks if the given string is a valid IPv4 range in Cidr notation, with the ip number in the cidr notation\n * being the start of the range\n *\n * @param {string} ipv4CidrNotation the IPv4 range in Cidr notation\n *\n * * @returns {[boolean , string[]]} first value is true if valid Cidr notation, false otherwise. Second\n * value contains [] or an array of error message when invalid\n */\n static isValidIPv4CidrRange(ipv4CidrNotation) {\n return Validator.isValidCidrRange(ipv4CidrNotation, Validator.isValidIPv4CidrNotation, BinaryUtils_1.dottedDecimalNotationToBinaryString, (value) => (0, BinaryUtils_2.cidrPrefixToMaskBinaryString)(value, \"IPv4\" /* IPNumType.IPv4 */));\n }\n /**\n * Checks if the given string is a valid IPv6 range in Cidr notation, with the ip number in the cidr notation\n * being the start of the range\n *\n * @param {string} ipv6CidrNotation the IPv6 range in Cidr notation\n *\n * * @returns {[boolean , string[]]} first value is true if valid Cidr notation, false otherwise. Second\n * value contains [] or an array of error message when invalid\n */\n static isValidIPv6CidrRange(ipv6CidrNotation) {\n return Validator.isValidCidrRange(ipv6CidrNotation, Validator.isValidIPv6CidrNotation, HexadecimalUtils_1.colonHexadecimalNotationToBinaryString, (value) => (0, BinaryUtils_2.cidrPrefixToMaskBinaryString)(value, \"IPv6\" /* IPNumType.IPv6 */));\n }\n static isValidCidrRange(rangeString, cidrNotationValidator, toBinaryStringConverter, prefixFactory) {\n let validationResult = cidrNotationValidator(rangeString);\n if (!validationResult[0]) {\n return validationResult;\n }\n let cidrComponents = rangeString.split(\"/\");\n let ip = cidrComponents[0];\n let range = cidrComponents[1];\n let ipNumber = BigInt(`0b${toBinaryStringConverter(ip)}`);\n let mask = BigInt(`0b${prefixFactory(parseInt(range))}`);\n let isValid = (ipNumber & (mask)) === (ipNumber);\n return isValid ? [isValid, []] : [isValid, [Validator.InvalidIPCidrRangeMessage]];\n }\n static isValidIPv4RangeString(ipv4RangeString) {\n let firstLastValidator = (firstIP, lastIP) => BigInt(`0b${(0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(firstIP)}`)\n >= BigInt(`0b${(0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(lastIP)}`);\n return this.isValidRange(ipv4RangeString, Validator.isValidIPv4String, firstLastValidator);\n }\n static isValidIPv6RangeString(ipv6RangeString) {\n let firstLastValidator = (firstIP, lastIP) => BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(firstIP)}`)\n >= BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(lastIP)}`);\n return this.isValidRange(ipv6RangeString, Validator.isValidIPv6String, firstLastValidator);\n }\n static isValidRange(rangeString, validator, firstLastValidator) {\n let rangeComponents = rangeString.split(\"-\").map(component => component.trim());\n if (rangeComponents.length !== 2 || (rangeComponents[0].length === 0 || rangeComponents[1].length === 0)) {\n return [false, [Validator.invalidRangeNotationMessage]];\n }\n let firstIP = rangeComponents[0];\n let lastIP = rangeComponents[1];\n let [validFirstIP, invalidFirstIPMessage] = validator(firstIP);\n let [validLastIP, invalidLastIPMessage] = validator(lastIP);\n let isValid = validFirstIP && validLastIP;\n if (isValid && firstLastValidator(firstIP, lastIP)) {\n return [false, [Validator.invalidRangeFirstNotGreaterThanLastMessage]];\n }\n let invalidMessage = invalidFirstIPMessage.concat(invalidLastIPMessage);\n return isValid ? [isValid, []] : [isValid, invalidMessage];\n }\n /**\n * Checks if the given string is a valid IPv6 range in Cidr notation\n *\n * @param {string} ipv6RangeAsCidrString the IPv6 range in Cidr notation\n *\n * @returns {[boolean , string]} first value is true if valid IPv6 range in Cidr notation, false otherwise.\n * Second value contains \"valid\" or an error message when value is invalid\n */\n // TODO change to be like isValidIPv4CidrNotation where validation is done on the component of the cidr notation\n // instead of a single regex check\n static isValidIPv6CidrNotation(ipv6RangeAsCidrString) {\n let isValid = Validator.IPV6_RANGE_PATTERN.test(ipv6RangeAsCidrString);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv6CidrNotationString]];\n }\n /**\n * Checks if the given string is a binary string. That is contains only contiguous 1s and 0s\n *\n * @param {string} binaryString the binary string\n * @returns {(boolean|string)[]} a tuple representing if valid or not and corresponding message\n */\n static isValidBinaryString(binaryString) {\n if (/^([10])+$/.test(binaryString)) {\n return [true, []];\n }\n else {\n return [false, [Validator.invalidBinaryStringErrorMessage]];\n }\n }\n static isNumeric(value) {\n return /^(\\d+)$/.test(value);\n }\n static isHexadecatet(value) {\n return /^[0-9A-Fa-f]{4}$/.test(value);\n }\n}\nexports.Validator = Validator;\nValidator.IPV4_PATTERN = new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/);\n// source: https://community.helpsystems.com/forums/intermapper/miscellaneous-topics/5acc4fcf-fa83-e511-80cf-0050568460e4\nValidator.IPV6_PATTERN = new RegExp(/^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/);\nValidator.IPV4_RANGE_PATTERN = new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\\/)([1-9]|[1-2][0-9]|3[0-2])$/);\nValidator.IPV6_RANGE_PATTERN = new RegExp(/^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/);\nValidator.IPV4_CONTIGUOUS_MASK_BIT_PATTERN = new RegExp(/^(1){0,32}(0){0,32}$/);\nValidator.IPV6_CONTIGUOUS_MASK_BIT_PATTERN = new RegExp(/^(1){0,128}(0){0,128}$/);\nValidator.EIGHT_BIT_SIZE = BigInt(`0b${\"1\".repeat(8)}`);\nValidator.SIXTEEN_BIT_SIZE = BigInt(`0b${\"1\".repeat(16)}`);\nValidator.THIRTY_TWO_BIT_SIZE = BigInt(`0b${\"1\".repeat(32)}`);\nValidator.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE = BigInt(`0b${\"1\".repeat(128)}`);\nValidator.IPV4_SIZE = BigInt(\"4294967296\");\nValidator.IPV6_SIZE = BigInt(\"340282366920938463463374607431768211456\");\nValidator.invalidAsnRangeMessage = \"ASN number given less than zero or is greater than 32bit\";\nValidator.invalid16BitAsnRangeMessage = \"ASN number given less than zero or is greater than 16bit\";\nValidator.invalidIPv4NumberMessage = \"IPv4 number given less than zero or is greater than 32bit\";\nValidator.invalidIPv6NumberMessage = \"IPv6 number given less than zero or is greater than 128bit\";\nValidator.invalidOctetRangeMessage = \"Value given contains an invalid Octet; Value is less than zero or is greater than 8bit\";\nValidator.invalidHexadecatetMessage = \"The value given is less than zero or is greater than 16bit\";\nValidator.invalidOctetCountMessage = \"An IP4 number cannot have less or greater than 4 octets\";\nValidator.invalidHexadecatetCountMessage = \"An IP6 number must have exactly 8 hexadecatet\";\nValidator.invalidMaskMessage = \"The Mask is invalid\";\nValidator.invalidPrefixValueMessage = \"A Prefix value cannot be less than 0 or greater than 32\";\nValidator.invalidIPv4CidrNotationMessage = \"Cidr notation should be in the form [ip number]/[range]\";\nValidator.InvalidIPCidrRangeMessage = \"Given IP number portion must is not the start of the range\";\nValidator.invalidRangeNotationMessage = \"Range notation should be in the form [first ip]-[last ip]\";\nValidator.invalidRangeFirstNotGreaterThanLastMessage = \"First IP in [first ip]-[last ip] must be less than Last IP\";\nValidator.invalidIPv6CidrNotationString = \"A Cidr notation string should contain an IPv6 number and prefix\";\nValidator.takeOutOfRangeSizeMessage = \"$count is greater than $size, the size of the range\";\nValidator.cannotSplitSingleRangeErrorMessage = \"Cannot split an IP range with a single IP number\";\nValidator.invalidInetNumType = \"Given ipNumType must be either InetNumType.IPv4 or InetNumType.IPv6\";\nValidator.invalidBinaryStringErrorMessage = \"Binary string should contain only contiguous 1s and 0s\";\nValidator.invalidIPRangeSizeMessage = \"Given size is zero or greater than maximum size of $iptype\";\nValidator.invalidIPRangeSizeForCidrMessage = \"Given size can't be created via cidr prefix\";\nValidator.invalidIPv4PatternMessage = \"Given IPv4 is not confirm to a valid IPv6 address\";\nValidator.invalidIPv6PatternMessage = \"Given IPv6 is not confirm to a valid IPv6 address\";\n//# sourceMappingURL=Validator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hexadecatet = void 0;\nconst Validator_1 = require(\"./Validator\");\n/**\n * A representation of a 4-digit hexadecimal number.\n *\n * It consists of four (base 16) number. ie FFFF\n *\n * It is used to represents the components of an IPv6 address\n */\nclass Hexadecatet {\n /**\n * A convenience method for constructing an instance of {@link Hexadecatet} from a four (base 16) number\n * representation of a 16bit value.\n *\n * @param {string} rawValue the four (base 16) number\n * @returns {Hexadecatet} an instance of {@link Hexadecatet}\n */\n static fromString(rawValue) {\n return new Hexadecatet(rawValue);\n }\n ;\n /**\n * A convenience method for constructing an instance of {@link Hexadecatet} from a decimal number representation\n * of a 16 bit value\n *\n * @param {number} rawValue decimal number representation of a 16 bit value\n * @returns {Hexadecatet} an instance of {@link Hexadecatet}\n */\n static fromNumber(rawValue) {\n return new Hexadecatet(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of {@link Hexadecatet}\n *\n * @param {string | number} givenValue a string or numeric value. If given value is a string then it should be a\n * four (base 16) number representation of a 16bit value. If it is a number, then it should be a decimal number\n * representation of a 16 bit value\n */\n constructor(givenValue) {\n let hexadecatetValue;\n if (typeof givenValue === 'string') {\n hexadecatetValue = parseInt(givenValue, 16);\n }\n else {\n hexadecatetValue = parseInt(String(givenValue), 16);\n }\n let [isValid, message] = Validator_1.Validator.isValidIPv6Hexadecatet(BigInt(hexadecatetValue));\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = hexadecatetValue;\n }\n /**\n * Returns the numeric value in base 10 (ie decimal)\n *\n * @returns {number} the numeric value in base 10 (ie decimal)\n */\n getValue() {\n return this.value;\n }\n /**\n * Returns the string representation of the base 16 representation of the value\n * @returns {string} the string representation of the base 16 representation of the value\n */\n // TODO pad with a zero if digit is less than 4\n toString() {\n return this.value.toString(16);\n }\n}\nexports.Hexadecatet = Hexadecatet;\n//# sourceMappingURL=Hexadecatet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Octet = void 0;\nconst Validator_1 = require(\"./Validator\");\n/**\n * A binary representation of a 8 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Octet_(computing)} for more information on Octets\n *\n * An octet is used in the textual representation of an {@link IPv4} number, where the IP number value is divided\n * into 4 octets\n */\nclass Octet {\n /**\n * Convenience method for creating an Octet out of a string value representing the value of the octet\n *\n * @param {string} rawValue the octet value in string\n * @returns {Octet} the Octet instance\n */\n static fromString(rawValue) {\n return new Octet(rawValue);\n }\n ;\n /**\n * Convenience method for creating an Octet out of a numeric value representing the value of the octet\n *\n * @param {number} rawValue the octet value in number\n * @returns {Octet} the Octet instance\n */\n static fromNumber(rawValue) {\n return new Octet(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of an Octet.\n *\n * The constructor parameter given could either be a string or number.\n *\n * If a string, it is the string representation of the numeric value of the octet\n * If a number, it is the numeric representation of the value of the octet\n *\n * @param {string | number} givenValue value of the octet to be created.\n */\n constructor(givenValue) {\n let octetValue;\n if (typeof givenValue === 'string') {\n octetValue = parseInt(givenValue);\n }\n else {\n octetValue = givenValue;\n }\n let [isValid, message] = Validator_1.Validator.isValidIPv4Octet(BigInt(octetValue));\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = octetValue;\n }\n /**\n * Method to get the numeric value of the octet\n *\n * @returns {number} the numeric value of the octet\n */\n getValue() {\n return this.value;\n }\n /**\n * Returns a decimal representation of the value of the octet in string\n *\n * @returns {string} a decimal representation of the value of the octet in string\n */\n toString() {\n return this.value.toString(10);\n }\n}\nexports.Octet = Octet;\n//# sourceMappingURL=Octet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPv6Mask = exports.IPv4Mask = exports.IPv6 = exports.Asn = exports.IPv4 = exports.AbstractIPNum = void 0;\nexports.isIPv4 = isIPv4;\nconst Octet_1 = require(\"./Octet\");\nconst Validator_1 = require(\"./Validator\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst BinaryUtils_2 = require(\"./BinaryUtils\");\nconst BinaryUtils_3 = require(\"./BinaryUtils\");\nconst BinaryUtils_4 = require(\"./BinaryUtils\");\nconst Hexadecatet_1 = require(\"./Hexadecatet\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst HexadecimalUtils_2 = require(\"./HexadecimalUtils\");\n/**\n * Provides the implementation of functionality that are common\n * to {@link IPv4}, {@link IPv6}, {@link IPv4Mask} and {@link IPv6Mask}\n */\nclass AbstractIPNum {\n /**\n * Gets the numeric value of an IP number as {@link BigInt}\n *\n * @returns bigInt the numeric value of an IP number.\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the binary string representation of an IP number.\n *\n * @returns {string} the string binary representation.\n */\n toBinaryString() {\n return (0, BinaryUtils_3.leftPadWithZeroBit)(this.value.toString(2), this.bitSize);\n }\n /**\n * Checks if an IP number has a value greater than the present value\n * @returns {boolean} true, if there is a value greater than the present value. Returns false otherwise.\n */\n hasNext() {\n return this.value < this.maximumBitSize;\n }\n /**\n * Checks if an IP number has a value lesser than the present value\n * @returns {boolean} true, if there is a value lesser than the present value. Returns false otherwise.\n */\n hasPrevious() {\n return this.value > 0n;\n }\n /**\n * Checks if the given IP number, is equals to the current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is equals\n */\n isEquals(anotherIPNum) {\n return this.value === anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is lesser than this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is less than this current one. False otherwise.\n */\n isLessThan(anotherIPNum) {\n return this.value < anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is greater than this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is greater than this current one. False otherwise.\n */\n isGreaterThan(anotherIPNum) {\n return this.value > anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is less than or equals to this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is less than or equals to this current one. False otherwise.\n */\n isLessThanOrEquals(anotherIPNum) {\n return this.value <= anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is greater than or equals to this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} {boolean} true if the given IP number is greater than or equals to this current one. False\n * otherwise.\n */\n isGreaterThanOrEquals(anotherIPNum) {\n return this.value >= anotherIPNum.value;\n }\n}\nexports.AbstractIPNum = AbstractIPNum;\n/**\n * Represents an IPv4 number. A 32 bit number that is used to uniquely identify a device that is part of a computer\n * network that uses the internet protocol for communication.\n *\n * @see https://en.wikipedia.org/wiki/IPv4\n * @see https://www.rfc-editor.org/info/rfc791\n */\nclass IPv4 extends AbstractIPNum {\n /**\n * A convenience method for creating an {@link IPv4} by providing the decimal value of the IP number in BigInt\n *\n * @param {bigint} bigIntValue the decimal value of the IP number in BigInt\n * @returns {IPv4} the IPv4 instance\n */\n static fromNumber(bigIntValue) {\n return new IPv4(bigIntValue);\n }\n /**\n * A convenience method for creating an {@link IPv4} by providing the IP number in dot-decimal notation. E.g\n * \"10.1.1.10\"\n *\n * {@see https://en.wikipedia.org/wiki/Dot-decimal_notation} for more information on dot-decimal notation.\n *\n * @param {string} ipString the IP number in dot-decimal notation\n * @returns {IPv4} the IPv4 instance\n */\n static fromDecimalDottedString(ipString) {\n return new IPv4(ipString);\n }\n /**\n * Alias for IPv4.fromDecimalDottedString.\n *\n * @param {string} ipString the IP number in dot-decimal notation\n * @returns {IPv4} the IPv4 instance\n */\n static fromString(ipString) {\n return IPv4.fromDecimalDottedString(ipString);\n }\n /**\n * A convenience method for creating an {@link IPv4} from binary string\n *\n * @param {string} ipBinaryString the binary string representing the IPv4 number to be created\n * @returns {IPv4} the IPv4 instance\n */\n static fromBinaryString(ipBinaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(ipBinaryString);\n if (validationResult[0]) {\n return new IPv4((0, BinaryUtils_2.parseBinaryStringToBigInt)(ipBinaryString));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * Constructor for an IPv4 number.\n *\n * @param {string | bigint} ipValue value to construct an IPv4 from. The given value can either be\n * numeric or string. If a string is given then it needs to be in dot-decimal notation\n */\n constructor(ipValue) {\n super();\n /**\n * The number of bits needed to represents the value of the IPv4 number\n */\n this.bitSize = 32;\n /**\n * The maximum bit size (i.e. binary value) of the IPv4 number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.THIRTY_TWO_BIT_SIZE;\n /**\n * The type of IP number. Value is one of the values of the {@link IPNumType} enum\n * @type {IPNumType} the type of IP number\n */\n this.type = \"IPv4\" /* IPNumType.IPv4 */;\n /**\n * An array of {@link Octet}'s\n *\n * @type {Array} the octets that makes up the IPv4 number\n */\n this.octets = [];\n /**\n * The string character used to separate the individual octets when the IPv4 is rendered as strings\n *\n * @type {string} The string character used to separate the individual octets when rendered as strings\n */\n this.separator = \".\";\n if (typeof ipValue === \"string\") {\n let [value, octets] = this.constructFromDecimalDottedString(ipValue);\n this.value = value;\n this.octets = octets;\n }\n else {\n let [value, octets] = this.constructFromBigIntValue(ipValue);\n this.value = value;\n this.octets = octets;\n }\n }\n /**\n * A string representation of the IPv4 number. The string representation is in dot-decimal notation\n *\n * @returns {string} The string representation in dot-decimal notation\n */\n toString() {\n return this.octets.map((value) => { return value.toString(); }).join(this.separator);\n }\n /**\n * Gets the individual {@link Octet} that makes up the IPv4 number\n *\n * @returns {Array<Octet>} The individual {@link Octet} that makes up the IPv4 number\n */\n getOctets() {\n return this.octets;\n }\n /**\n * Returns the next IPv4 number\n *\n * @returns {IPv4} the next IPv4 number\n */\n nextIPNumber() {\n return IPv4.fromNumber(this.getValue() + 1n);\n }\n /**\n * Returns the previous IPv4 number\n *\n * @returns {IPv4} the previous IPv4 number\n */\n previousIPNumber() {\n return IPv4.fromNumber(this.getValue() - 1n);\n }\n /**\n * Returns this IPv4 number as a IPv4-Mapped IPv6 Address\n *\n * The IPv4-Mapped IPv6 Address allows an IPv4 number to be embedded within an IPv6 number\n *\n * {@see https://tools.ietf.org/html/rfc4291#section-2.5.5} for more information on the IPv4-Mapped IPv6 Address\n *\n * @returns {IPv6} an IPv6 number with the IPv4 embedded within it\n */\n toIPv4MappedIPv6() {\n let binary = '1'.repeat(16) + this.toBinaryString();\n return IPv6.fromBinaryString(binary);\n }\n constructFromDecimalDottedString(ipString) {\n let octets;\n let value;\n let [isValid, message] = Validator_1.Validator.isValidIPv4String(ipString);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringOctets = ipString.split(\".\");\n octets = stringOctets.map((rawOctet) => {\n return Octet_1.Octet.fromString(rawOctet);\n });\n value = BigInt(`0b${(0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(ipString)}`);\n return [value, octets];\n }\n constructFromBigIntValue(ipv4Number) {\n let [isValid, message] = Validator_1.Validator.isValidIPv4Number(ipv4Number);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let binaryString = (0, BinaryUtils_4.numberToBinaryString)(ipv4Number);\n ipv4Number = typeof ipv4Number === \"bigint\" ? ipv4Number : BigInt(ipv4Number);\n return [ipv4Number, this.binaryStringToDecimalOctets(binaryString)];\n }\n binaryStringToDecimalOctets(ipv4BinaryString) {\n if (ipv4BinaryString.length < 32) {\n ipv4BinaryString = (0, BinaryUtils_3.leftPadWithZeroBit)(ipv4BinaryString, 32);\n }\n let octets = ipv4BinaryString.match(/.{1,8}/g);\n return octets.map((octet) => {\n return Octet_1.Octet.fromString((0, BinaryUtils_2.parseBinaryStringToBigInt)(octet).toString());\n });\n }\n}\nexports.IPv4 = IPv4;\n/**\n * Represents an Autonomous System Number. Which is a number that is used to identify\n * a group of IP addresses with a common, clearly defined routing policy.\n *\n * @see https://en.wikipedia.org/wiki/Autonomous_system_(Internet)\n * @see https://tools.ietf.org/html/rfc5396\n */\nclass Asn extends AbstractIPNum {\n /**\n * A convenience method for creating an instance of {@link Asn} from a string\n *\n * The given string can be in asplain, asdot or asdot+ representation format.\n * {@see https://tools.ietf.org/html/rfc5396} for more information on\n * the different ASN string representation\n *\n * @param {string} rawValue the asn string. In either asplain, asdot or asdot+ format\n * @returns {Asn} the constructed ASN instance\n */\n static fromString(rawValue) {\n return new Asn(rawValue);\n }\n ;\n /**\n * A convenience method for creating an instance of {@link Asn} from a numeric value\n *\n * @param {number} rawValue the asn numeric value\n * @returns {Asn} the constructed ASN instance\n */\n static fromNumber(rawValue) {\n return new Asn(rawValue);\n }\n ;\n /**\n * A convenience method for creating an instance of {@link Asn} from a binary string\n *\n * @param {string} binaryString to create an ASN instance from\n * @returns {Asn} the constructed ASN instance\n */\n static fromBinaryString(binaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(binaryString);\n if (validationResult[0]) {\n return new Asn(parseInt(binaryString, 2));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * Constructor for an instance of {@link ASN}\n *\n * @param {string | number} rawValue value to construct an ASN from. The given value can either be numeric or\n * string. If in string then it can be in asplain, asdot or asdot+ string representation format\n */\n constructor(rawValue) {\n super();\n /**\n * The number of bits needed to represents the value of the ASN number\n */\n this.bitSize = 32;\n /**\n * The maximum bit size (i.e. binary value) of the ASN number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.THIRTY_TWO_BIT_SIZE;\n this.type = \"ASN\" /* IPNumType.ASN */;\n if (typeof rawValue === 'string') {\n if (Asn.startWithASPrefix(rawValue)) {\n this.value = BigInt(parseInt(rawValue.substring(2)));\n }\n else if (rawValue.indexOf(\".\") != -1) {\n this.value = BigInt(this.parseFromDotNotation(rawValue));\n }\n else {\n this.value = BigInt(parseInt(rawValue));\n }\n }\n else {\n let valueAsBigInt = BigInt(rawValue);\n let [isValid, message] = Validator_1.Validator.isValidAsnNumber(valueAsBigInt);\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = valueAsBigInt;\n }\n }\n /**\n * A string representation where the asn value is prefixed by \"ASN\". For example \"AS65526\"\n *\n * @returns {string} A string representation where the asn value is prefixed by \"ASN\"\n */\n toString() {\n let stringValue = this.value.toString();\n return `${Asn.AS_PREFIX}${stringValue}`;\n }\n /**\n * A string representation where the ASN numeric value of is represented as a string. For example \"65526\"\n *\n * @returns {string} A string representation where the ASN numeric value of is represented as a string\n */\n toASPlain() {\n return this.value.toString();\n }\n /**\n * A string representation where the ASN value is represented using the asplain notation if the ASN value is\n * less than 65536 and uses asdot+ notation when the value is greater than 65536.\n *\n * For example 65526 will be represented as \"65526\" while 65546 will be represented as \"1.10\"\n *\n *\n * @returns {string} A string representation of the ASN in either asplain or asdot+ notation depending on\n * whether the numeric value of the ASN number is greater than 65526 or not.\n */\n toASDot() {\n if (this.value.valueOf() >= 65536n) {\n return this.toASDotPlus();\n }\n return this.toASPlain();\n }\n /**\n * A string representation where the ASN value is represented using the asdot+ notation\n *\n * @returns {string} A string representation where the ASN value is represented using the asdot+ notation\n *\n */\n toASDotPlus() {\n let high = this.value.valueOf() / 65535n;\n let low = (this.value.valueOf() % 65535n) - high;\n return `${high}.${low}`;\n }\n /**\n * Converts the ASN value to binary numbers represented with strings\n *\n * @returns {string} a binary string representation of the value of the ASN number\n */\n toBinaryString() {\n return (0, BinaryUtils_4.numberToBinaryString)(this.value);\n }\n /**\n * Checks if the ASN value is 16bit\n *\n * @returns {boolean} true if the ASN is a 16bit value. False otherwise.\n */\n is16Bit() {\n let [valid16BitAsnNumber,] = Validator_1.Validator.isValid16BitAsnNumber(this.value);\n return valid16BitAsnNumber;\n }\n /**\n * Checks if the ASN value is 32bit\n *\n * @returns {boolean} true if the ASN is a 32bit value. False otherwise.\n */\n is32Bit() {\n return !this.is16Bit();\n }\n /**\n * Returns the next ASN number\n *\n * @returns {AbstractIPNum} the next ASN number\n */\n nextIPNumber() {\n return new Asn(this.value.valueOf() + 1n);\n }\n /**\n * Returns the previous ASN number\n *\n * @returns {AbstractIPNum} the previous ASN number\n */\n previousIPNumber() {\n return new Asn(this.value.valueOf() - 1n);\n }\n static startWithASPrefix(word) {\n return word.indexOf(Asn.AS_PREFIX) === 0;\n }\n parseFromDotNotation(rawValue) {\n let values = rawValue.split(\".\");\n let high = parseInt(values[0]);\n let low = parseInt(values[1]);\n return (high * 65535) + (low + high);\n }\n}\nexports.Asn = Asn;\nAsn.AS_PREFIX = \"AS\";\n/**\n * Represents an IPv6 number. A 128 bit number that is used to uniquely identify a device that is part of a computer\n * network that uses the internet protocol for communication.\n *\n * @see https://en.wikipedia.org/wiki/IPv6\n * @see https://www.rfc-editor.org/info/rfc8200\n */\nclass IPv6 extends AbstractIPNum {\n /**\n * A convenience method for creating an {@link IPv6} by providing the decimal value of the IP number in BigInt\n *\n * @param {bigint} bigIntValue the decimal value of the IP number in BigInt\n * @returns {IPv6} the IPv6 instance\n */\n static fromBigInt(bigIntValue) {\n return new IPv6(bigIntValue);\n }\n /**\n * A convenience method for creating an {@link IPv6} by providing the IP number in hexadecatet notation. E.g\n * \"2001:800:0:0:0:0:0:2002\"\n *\n * {@see https://en.wikipedia.org/wiki/IPv6_address#Representation} for more information on hexadecatet notation.\n *\n * @param {string} ipString the IP number in hexadecatet\n * @returns {IPv6} the IPv6 instance\n */\n static fromHexadecatet(ipString) {\n return new IPv6(ipString);\n }\n /**\n * Alias for IPv6.fromHexadecimalString\n *\n * @param {string} ipString the IP number in hexadecatet\n * @returns {IPv6} the IPv6 instance\n */\n static fromString(ipString) {\n return IPv6.fromHexadecatet(ipString);\n }\n /**\n * A convenience method for creating an {@link IPv6} from binary string\n *\n * @param {string} ipBinaryString the binary string representing the IPv6 number to be created\n * @returns {IPv6} the IPv6 instance\n */\n static fromBinaryString(ipBinaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(ipBinaryString);\n if (validationResult[0]) {\n let paddedBinaryString = (0, BinaryUtils_3.leftPadWithZeroBit)(ipBinaryString, 128);\n return new IPv6((0, BinaryUtils_2.parseBinaryStringToBigInt)(paddedBinaryString));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * A convenience method for creating an IPv4-Compatible {@link IPv6} Address from an instance of {@link IPv4}\n *\n * @param {IPv4} ipv4 to create an IPv4-Compatible {@link IPv6} Address\n * @returns {IPv6} the IPv4-Compatible {@link IPv6} Address\n */\n static fromIPv4(ipv4) {\n return ipv4.toIPv4MappedIPv6();\n }\n /**\n * A convenience method for creating an IPv4-Compatible {@link IPv6} Address from a IPv4 represented in\n * dot-decimal notation i.e. 127.0.0.1\n *\n * @param {IPv4} ip4DotDecimalString string represented in a dot decimal string\n * @returns {IPv6} the IPv4-Compatible {@link IPv6} Address\n */\n static fromIPv4DotDecimalString(ip4DotDecimalString) {\n return new IPv4(ip4DotDecimalString).toIPv4MappedIPv6();\n }\n /**\n * Constructor for an IPv6 number.\n *\n * @param {string | bigint} ipValue value to construct an IPv6 from. The given value can either be\n * numeric or string. If a string is given then it needs to be in hexadecatet string notation\n */\n constructor(ipValue) {\n super();\n /**\n * The number of bits needed to represents the value of the IPv6 number\n */\n this.bitSize = 128;\n /**\n * The maximum bit size (i.e. binary value) of the IPv6 number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE;\n /**\n * The type of IP number. Value is one of the values of the {@link IPNumType} enum\n * @type {IPNumType} the type of IP number\n */\n this.type = \"IPv6\" /* IPNumType.IPv6 */;\n /**\n * An array of {@link Hexadecatet}'s\n *\n * @type {Array} the hexadecatet that makes up the IPv6 number\n */\n this.hexadecatet = [];\n /**\n * The string character used to separate the individual hexadecatet when the IPv6 is rendered as strings\n *\n * @type {string} The string character used to separate the individual hexadecatet when rendered as strings\n */\n this.separator = \":\";\n if (typeof ipValue === \"string\") {\n let expandedIPv6 = (0, IPv6Utils_1.expandIPv6Number)(ipValue);\n let [value, hexadecatet] = this.constructFromHexadecimalDottedString(expandedIPv6);\n this.value = value;\n this.hexadecatet = hexadecatet;\n }\n else {\n let [value, hexadecatet] = this.constructFromBigIntValue(ipValue);\n this.value = value;\n this.hexadecatet = hexadecatet;\n }\n }\n /**\n * A string representation of the IPv6 number.\n *\n * @returns {string} The string representation of IPv6\n */\n toString() {\n let ipv6String = this.hexadecatet.map((value) => { return value.toString(); }).join(\":\");\n if (this.hexadecatet.length < 8) {\n return \"::\" + ipv6String;\n }\n else {\n return ipv6String;\n }\n }\n /**\n * Gets the individual {@link Hexadecatet} that makes up the IPv6 number\n *\n * @returns {Array<Hexadecatet>} The individual {@link Hexadecatet} that makes up the IPv6 number\n */\n //TODO maybe rename to something like getSegments? so it can be same with getOctet\n getHexadecatet() {\n return this.hexadecatet;\n }\n /**\n * Returns the next IPv6 number\n *\n * @returns {IPv6} the next IPv6 number\n */\n nextIPNumber() {\n return IPv6.fromBigInt(this.getValue() + 1n);\n }\n /**\n * Returns the previous IPv6 number\n *\n * @returns {IPv6} the previous IPv6 number\n */\n previousIPNumber() {\n return IPv6.fromBigInt(this.getValue() - 1n);\n }\n constructFromBigIntValue(ipv6Number) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6Number(ipv6Number);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let binaryString = (0, BinaryUtils_4.numberToBinaryString)(ipv6Number);\n return [ipv6Number, this.binaryStringToHexadecatets(binaryString)];\n }\n constructFromHexadecimalDottedString(expandedIPv6) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6String(expandedIPv6);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringHexadecimals = expandedIPv6.split(\":\");\n let hexadecatet = stringHexadecimals.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n let value = BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(expandedIPv6)}`);\n return [value, hexadecatet];\n }\n binaryStringToHexadecatets(binaryString) {\n let hexadecimalString = (0, HexadecimalUtils_1.binaryStringToHexadecimalString)(binaryString);\n while (hexadecimalString.length % 4 != 0) {\n hexadecimalString = '0' + hexadecimalString;\n }\n let hexadecimalStrings = hexadecimalString.match(/.{1,4}/g);\n return hexadecimalStrings.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n }\n}\nexports.IPv6 = IPv6;\n/**\n * The IPv4Mask can be seen as a specialized IPv4 number where, in a 32 bit number, starting from the left, you\n * have continuous bits turned on (with 1 value) followed by bits turned off (with 0 value). In networking, it is used\n * to demarcate which bits are used to identify a network, and the ones that are used to identify hosts on the network\n */\nclass IPv4Mask extends IPv4 {\n /**\n * A convenience method for creating an instance of IPv4Mask. The passed strings need to be a valid IPv4\n * number in dot-decimal notation.\n *\n * @param {string} rawValue The passed string in dot-decimal notation\n * @returns {IPv4Mask} the instance of IPv4Mask\n */\n static fromDecimalDottedString(rawValue) {\n return new IPv4Mask(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of IPv4Mask.\n * The passed strings need to be a valid IPv4 mask number in dot-decimal notation.\n *\n * @param {string} ipString The passed string in dot-decimal notation\n */\n constructor(ipString) {\n super(ipString);\n /**\n * An array of {@link Octet}'s\n *\n * @type {Array} the octets that makes up the IPv4Mask\n */\n this.octets = [];\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidIPv4Mask(ipString);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringOctets = ipString.split(\".\");\n this.octets = stringOctets.map((rawOctet) => {\n return Octet_1.Octet.fromString(rawOctet);\n });\n let binaryString = (0, BinaryUtils_1.dottedDecimalNotationToBinaryString)(ipString);\n this.prefix = (binaryString.match(/1/g) || []).length;\n this.value = BigInt(`0b${binaryString}`);\n }\n}\nexports.IPv4Mask = IPv4Mask;\n/**\n * The IPv6Mask can be seen as a specialized IPv4 number where, in a 128 bit number, starting from the left,\n * you have continuous bits turned on (with 1 value) followed by bits turned off (with 0 value). In networking, it\n * is used to demarcate which bits are used to identify a network, and the ones that are used to identify hosts\n * on the network\n */\nclass IPv6Mask extends IPv6 {\n /**\n * A convenience method for creating an instance of IPv6Mask.\n * The passed strings need to be a valid IPv4 mask number in dot-decimal notation.\n *\n * @param {string} rawValue The passed string in textual notation\n * @returns {IPv6Mask} the instance of IPv6Mask\n */\n static fromHexadecatet(rawValue) {\n return new IPv6Mask(rawValue);\n }\n ;\n /**\n * Constructor for creating an instance of IPv6Mask.\n * The passed strings need to be a valid IPv6 mask number in dot-decimal notation\n *\n * @param {string} ipString The passed IPv6 string\n */\n constructor(ipString) {\n super(ipString);\n /**\n * An array of {@link Hexadecatet}'s\n *\n * @type {Array} the hexadecatet that makes up the IPv6 number\n */\n this.hexadecatet = [];\n let isValid;\n let message;\n let expandedIPv6 = (0, IPv6Utils_1.expandIPv6Number)(ipString);\n [isValid, message] = Validator_1.Validator.isValidIPv6Mask(expandedIPv6);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringHexadecimals = expandedIPv6.split(\":\");\n this.hexadecatet = stringHexadecimals.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n let binaryString = (0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(expandedIPv6);\n this.prefix = (binaryString.match(/1/g) || []).length;\n this.value = BigInt(`0b${binaryString}`);\n this.value = BigInt(`0b${(0, HexadecimalUtils_2.hexadectetNotationToBinaryString)(expandedIPv6)}`);\n }\n}\nexports.IPv6Mask = IPv6Mask;\n/**\n * Check is the given IP number is an {@link IPv4} or not\n * @param ip the IP number to check if it is IPv4.\n */\nfunction isIPv4(ip) {\n return ip.bitSize === 32;\n}\n//# sourceMappingURL=IPNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=IPNumType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPv6Prefix = exports.IPv4Prefix = void 0;\nexports.isIPv4Prefix = isIPv4Prefix;\nconst Validator_1 = require(\"./Validator\");\nconst IPNumber_1 = require(\"./IPNumber\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst Hexadecatet_1 = require(\"./Hexadecatet\");\n/**\n * Represents the prefix portion in the CIDR notation for representing IP ranges\n *\n * The IPv4 prefix portion represents the mask. It is the number of continuous bits turned on (with value 1)\n * counting from the left side of an 8 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing} for more information on CIDR\n */\nclass IPv4Prefix {\n /**\n * Convenience method for constructing an instance of IPv4 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv4 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv4 prefix\n */\n static fromNumber(rawValue) {\n return new IPv4Prefix(rawValue);\n }\n ;\n static fromRangeSize(rangeSize) {\n let prefixNumber = rangeSize === (1n) ? 32 : 32 - rangeSizeToPrefix(rangeSize, Validator_1.Validator.IPV4_SIZE);\n return IPv4Prefix.fromNumber(BigInt(prefixNumber));\n }\n ;\n /**\n * Constructor for an instance of IPv4 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv4 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv4 prefix\n */\n constructor(rawValue) {\n this.type = \"IPv4\";\n this.bitValue = 32n;\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidPrefixValue(rawValue, \"IPv4\" /* IPNumType.IPv4 */);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = rawValue;\n }\n /**\n * Gets the decimal value of the IPv4 prefix\n *\n * @returns {number} the decimal value of the IPv4 prefix\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the decimal value of the IPv4 prefix as string\n * @returns {string} The decimal value of the IPv4 prefix as string\n */\n toString() {\n return this.value.toString();\n }\n /**\n * Converts the IPv4 prefix to a {@link IPv4Mask}\n *\n * The IPv4 mask is the representation of the prefix in the dot-decimal notation\n *\n * @returns {IPv4Mask} the mask representation of the prefix\n */\n toMask() {\n let onBits = '1'.repeat(Number(this.value));\n let offBits = '0'.repeat(Number(32n - this.value));\n return IPNumber_1.IPv4Mask.fromDecimalDottedString(this.toDecimalNotation(`${onBits}${offBits}`));\n }\n /**\n * Returns the size (number of IP numbers) of range of this prefix\n *\n * @return {bigint} the size (number of IP numbers) of range of this prefix\n */\n toRangeSize() {\n /**\n * Using bitwise shift operation this will be\n * 1 << (this.bitValue - this.getValue())\n * Since left shift a number by x is equivalent to multiplying the number by the power x raised to 2\n * 2 << 4 = 2 * (2 raised to 4)\n */\n return 1n << (this.bitValue - this.getValue());\n }\n /**\n * Returns a prefix for when this prefix is merged\n * with another prefix of the same size\n */\n merge() {\n return new IPv4Prefix(this.value - 1n);\n }\n /**\n * Returns a prefix for when this prefix is split\n * into two equal halves\n */\n split() {\n return new IPv4Prefix(this.value + 1n);\n }\n toDecimalNotation(bits) {\n return `${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(0, 8))}.${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(8, 8))}.${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(16, 8))}.${(0, BinaryUtils_1.parseBinaryStringToBigInt)(bits.substr(24, 8))}`;\n }\n}\nexports.IPv4Prefix = IPv4Prefix;\n/**\n * Represents the prefix portion in the CIDR notation for representing IP ranges\n *\n * The IPv6 prefix portion represents the mask. It is the number of continuous bits turned on (with value 1)\n * counting from the left side of an 128 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing} for more information on CIDR\n */\nclass IPv6Prefix {\n /**\n * Convenience method for constructing an instance of IPv46 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv6 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv6 prefix\n */\n static fromNumber(rawValue) {\n return new IPv6Prefix(rawValue);\n }\n ;\n static fromRangeSize(rangeSize) {\n let prefixNumber = rangeSize === (1n) ? 128 : 128 - rangeSizeToPrefix(rangeSize, Validator_1.Validator.IPV6_SIZE);\n return IPv6Prefix.fromNumber(BigInt(prefixNumber));\n }\n /**\n * Constructor for an instance of IPv6 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv6 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv6 prefix\n */\n constructor(rawValue) {\n this.type = \"IPv6\";\n this.bitValue = 128n;\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidPrefixValue(rawValue, \"IPv6\" /* IPNumType.IPv6 */);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = rawValue;\n }\n /**\n * Gets the decimal value of the IPv6 prefix\n *\n * @returns {number} the decimal value of the IPv6 prefix\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the decimal value of the IPv4 prefix as string\n * @returns {string} he decimal value of the IPv4 prefix as string\n */\n toString() {\n return this.value.toString();\n }\n /**\n * Converts the IPv6 prefix to a {@link IPv6Mask}\n *\n * The IPv6 mask is the representation of the prefix in 8 groups of 16 bit values represented in hexadecimal\n *\n * @returns {IPv6Mask} the mask representation of the prefix\n */\n toMask() {\n let onBits = '1'.repeat(Number(this.value));\n let offBits = '0'.repeat(128 - Number(this.value));\n return IPNumber_1.IPv6Mask.fromHexadecatet(this.toHexadecatetNotation(`${onBits}${offBits}`));\n }\n /**\n * Returns the size (number of IP numbers) of range of this prefix\n *\n * @return {bigint} the size (number of IP numbers) of range of this prefix\n */\n toRangeSize() {\n /**\n * Using bitwise shift operation this will be\n * 1 << (this.bitValue - this.getValue())\n * Since left shift a number by x is equivalent to multiplying the number by the power x raised to 2\n * 2 << 4 = 2 * (2 raised to 4)\n */\n return 1n << (this.bitValue - this.getValue());\n }\n /**\n * Returns a prefix for when this prefix is merged\n * with another prefix of the same size\n */\n merge() {\n return new IPv6Prefix(this.value - 1n);\n }\n /**\n * Returns a prefix for when this prefix is split\n * into two equal halves\n */\n split() {\n return new IPv6Prefix(this.value + 1n);\n }\n toHexadecatetNotation(bits) {\n let binaryStrings = bits.match(/.{1,16}/g);\n let hexadecimalStrings = binaryStrings.map((binaryString) => {\n return Hexadecatet_1.Hexadecatet.fromString((0, HexadecimalUtils_1.binaryStringToHexadecimalString)(binaryString));\n });\n return hexadecimalStrings.map((value) => { return value.toString(); }).join(\":\");\n }\n}\nexports.IPv6Prefix = IPv6Prefix;\nfunction rangeSizeToPrefix(rangeSize, rangeMaxSize) {\n let ipType = rangeMaxSize > (Validator_1.Validator.IPV4_SIZE) ? \"IPv6\" : \"IPv4\";\n if (rangeSize > (rangeMaxSize) || rangeSize === (0n)) {\n throw new Error(Validator_1.Validator.invalidIPRangeSizeMessage.replace(\"$iptype\", ipType));\n }\n try {\n return (0, BinaryUtils_1.intLog2)(rangeSize);\n }\n catch (e) {\n throw new Error(Validator_1.Validator.invalidIPRangeSizeForCidrMessage);\n }\n}\n/**\n * Check is the given Prefix is an {@link IPv4Prefix} or not\n * @param prefix the IP prefix to check if it is IPv4Prefix.\n */\nfunction isIPv4Prefix(prefix) {\n return prefix.type === \"IPv4\";\n}\n/**\n * Check is the given Prefix is an {@link IPv4Prefix} or not\n * @param prefix the IP prefix to check if it is IPv4Prefix.\n */\nfunction isIPv6Prefix(prefix) {\n return prefix.type === \"IPv6\";\n}\n//# sourceMappingURL=Prefix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPv6CidrRange = exports.IPv4CidrRange = exports.AbstractIPRange = exports.RangedSet = void 0;\nexports.isIPv4CidrRange = isIPv4CidrRange;\nconst IPNumber_1 = require(\"./IPNumber\");\nconst Prefix_1 = require(\"./Prefix\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst Validator_1 = require(\"./Validator\");\n/**\n * Represents a continuous segment of either IPv4 or IPv6 numbers\n * without adhering to classless inter-domain routing scheme\n * for allocating IP addresses.\n */\nclass RangedSet {\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from a\n * single IP number.\n *\n * @param ip The IP number, either IPv4 or IPv6 to construct the range from.\n */\n static fromSingleIP(ip) {\n return new RangedSet(ip, ip);\n }\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from an\n * instance of either {@link IPv4CidrRange} or {@link IPv6CidrRange}\n *\n * @param cidrRange an instance of {@link RangedSet}\n */\n static fromCidrRange(cidrRange) {\n return new RangedSet(cidrRange.getFirst(), cidrRange.getLast());\n }\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from\n * a range string in the form of firstIp-lastIp\n *\n * @param rangeString string in the form of firstIp-lastIp\n */\n static fromRangeString(rangeString) {\n let ips = rangeString.split(\"-\").map(ip => ip.trim());\n if (ips.length !== 2) {\n throw new Error(\"Argument should be in the format firstip-lastip\");\n }\n let [firstIPString, lastIPString] = ips;\n let [isValidFirstIPv4,] = Validator_1.Validator.isValidIPv4String(firstIPString);\n let [isValidSecondIPv4,] = Validator_1.Validator.isValidIPv4String(lastIPString);\n let [isValidFirstIPv6,] = Validator_1.Validator.isValidIPv6String(firstIPString);\n let [isValidLastIPv6,] = Validator_1.Validator.isValidIPv6String(lastIPString);\n if (isValidFirstIPv4 && isValidSecondIPv4) {\n return new RangedSet(IPNumber_1.IPv4.fromDecimalDottedString(firstIPString), IPNumber_1.IPv4.fromDecimalDottedString(lastIPString));\n }\n else if (isValidFirstIPv6 && isValidLastIPv6) {\n return new RangedSet(IPNumber_1.IPv6.fromHexadecatet(firstIPString), IPNumber_1.IPv6.fromHexadecatet(lastIPString));\n }\n else {\n throw new Error(\"First IP and Last IP should be valid and same type\");\n }\n }\n /**\n * Constructor for an instance of {@link RangedSet} from an\n * instance of either {@link IPv4CidrRange} or {@link IPv6CidrRange}\n *\n * Throws an exception if first IP number is not less than given last IP number\n *\n * @param first the first IP number of the range\n * @param last the last IP number of the range\n */\n constructor(first, last) {\n this.first = first;\n this.last = last;\n if (first.isGreaterThan(last)) {\n throw new Error(`${first.toString()} should be lower than ${last.toString()}`);\n }\n this.currentValue = first;\n this.bitValue = BigInt(first.bitSize);\n }\n /**\n * Returns the first IP number in the range\n */\n getFirst() {\n return this.first;\n }\n /**\n * Returns the last IP number in the range\n */\n getLast() {\n return this.last;\n }\n /**\n * Returns the size, which is the number of IP numbers in the range.\n */\n getSize() {\n return this.last.getValue() - (this.first.getValue()) + 1n;\n }\n /**\n * Converts to a string representation of the range in the form of:\n * <first-ip>-<last-ip>\n */\n toRangeString() {\n return `${this.getFirst()}-${this.getLast()}`;\n }\n /**\n * Checks if this range is inside another range.\n *\n * @param otherRange the other range to check if this range is inside of.\n */\n inside(otherRange) {\n return otherRange.contains(this);\n }\n /**\n * Checks if this range contains the given other range.\n *\n * @param otherRange the other range to check if this range contains\n */\n contains(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisFirst.isLessThanOrEquals(otherFirst) && thisLast.isGreaterThanOrEquals(otherLast));\n }\n /**\n * Check if this range is equal to the given other range.\n *\n * @param otherRange the other range to check if equal to this range.\n */\n isEquals(otherRange) {\n return this.getFirst().isEquals(otherRange.getFirst())\n && this.getLast().isEquals(otherRange.getLast());\n }\n ;\n /**\n * Check if this range is less than the given range.\n *\n * @param otherRange the other range to check if less than.\n */\n isLessThan(otherRange) {\n if (this.isEquals(otherRange)) {\n return false;\n }\n else {\n if (this.getFirst().isEquals(otherRange.getFirst())) {\n return this.getSize() < (otherRange.getSize());\n }\n return this.getFirst().isLessThan(otherRange.getFirst());\n }\n }\n /**\n * Check if this range is greater than the given range.\n *\n * @param otherRange the other range to check if greater than.\n */\n isGreaterThan(otherRange) {\n if (this.isEquals(otherRange)) {\n return false;\n }\n else {\n if (this.getFirst().isEquals(otherRange.getFirst())) {\n return this.getSize() > (otherRange.getSize());\n }\n return this.getFirst().isGreaterThan(otherRange.getFirst());\n }\n }\n /**\n * Checks of this range overlaps with a given other range.\n *\n * This means it checks if part of a range is part of another range without\n * being totally contained in the other range. Hence Equal or ranges contained inside one\n * another are not considered as overlapping.\n *\n * @param otherRange the other range to check if it overlaps with this range.\n */\n isOverlapping(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisLast.isGreaterThan(otherFirst) && thisLast.isLessThanOrEquals(otherLast) && thisFirst.isLessThan(otherFirst)\n ||\n otherLast.isGreaterThan(thisFirst) && otherLast.isLessThanOrEquals(thisLast) && otherFirst.isLessThan(thisFirst)\n ||\n this.contains(otherRange)\n ||\n otherRange.contains(this));\n }\n /**\n * Check if this range can be converted to a CIDR range.\n */\n isCidrAble() {\n if (this.getSize() === 1n) {\n return true;\n }\n try {\n let prefix = (0, BinaryUtils_1.intLog2)(this.getSize());\n let netmask = (0, BinaryUtils_1.parseBinaryStringToBigInt)((0, BinaryUtils_1.cidrPrefixToMaskBinaryString)(prefix, (0, IPNumber_1.isIPv4)(this.currentValue) ? \"IPv4\" /* IPNumType.IPv4 */ : \"IPv6\" /* IPNumType.IPv6 */));\n return (this.first.getValue()) === (netmask & (this.first.getValue()));\n }\n catch (e) {\n return false;\n }\n }\n /**\n * Converts an instance of range to an instance of CIDR range\n */\n toCidrRange() {\n if ((0, IPNumber_1.isIPv4)(this.currentValue)) {\n return this.toIPv4CidrRange();\n }\n else {\n return this.toIPv6CidrRange();\n }\n }\n ;\n /**\n * Checks if this range is consecutive with another range.\n *\n * This means if the two ranges can be placed side by side, without any gap. Hence Equal\n * or ranges contained inside one another, or overlapping ranges are not considered as consecutive.\n *\n * @param otherRange the other range to check if this range is consecutive to.\n */\n isConsecutive(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisLast.hasNext() && thisLast.nextIPNumber().isEquals(otherFirst)\n ||\n otherLast.hasNext() && otherLast.nextIPNumber().isEquals(thisFirst));\n }\n /**\n * Creates a range that is a union of this range and the given other range.\n *\n * @param otherRange the other range to combine with this range\n */\n union(otherRange) {\n if (this.isEquals(otherRange)) {\n return new RangedSet(otherRange.getFirst(), otherRange.getLast());\n }\n if (this.contains(otherRange)) {\n return new RangedSet(this.getFirst(), this.getLast());\n }\n else if (otherRange.contains(this)) {\n return new RangedSet(otherRange.getFirst(), otherRange.getLast());\n }\n if (this.isOverlapping(otherRange)) {\n if (this.getFirst().isLessThan(otherRange.getFirst())) {\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n else {\n return new RangedSet(otherRange.getFirst(), this.getLast());\n }\n }\n throw new Error(\"Ranges do not overlap nor are equal\");\n }\n /**\n * Prepends given range with this range.\n * The last IP in the given range should be adjacent to the first IP in this range\n *\n * @param otherRange the other range to prepend\n */\n prepend(otherRange) {\n if (otherRange.getLast().nextIPNumber().isEquals(this.getFirst())) {\n return new RangedSet(otherRange.getFirst(), this.getLast());\n }\n else {\n throw new Error(\"Range to prepend must be adjacent\");\n }\n }\n /**\n * Appends given range with this range.\n * The last IP in this range should be adjacent to the first IP in range to append\n *\n * @param otherRange the other range to append\n */\n append(otherRange) {\n if (this.getLast().nextIPNumber().isEquals(otherRange.getFirst())) {\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n else {\n throw new Error(\"Range to append must be adjacent\");\n }\n }\n subtract(otherRange) {\n if (!this.isOverlapping(otherRange)) {\n throw new Error(\"Cannot subtract ranges that are not overlapping\");\n }\n if (!this.isLessThan(otherRange)) {\n throw new Error(\"Cannot subtract a larger range from this range\");\n }\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n /**\n * Returns a sub range of a given size from this range.\n *\n * @param offset offset from this range where the subrange should begin\n * @param size the size of the range\n */\n takeSubRange(offset, size) {\n if (offset + (size) > (this.getSize())) {\n throw new RangeError(\"Requested range is greater than what can be taken\");\n }\n if (size === (0n)) {\n throw new Error(\"Sub range cannot be zero\");\n }\n let valueOfFirstIp = this.getFirst().value + (offset);\n let firstIp = (0, IPNumber_1.isIPv4)(this.getFirst()) ?\n IPNumber_1.IPv4.fromNumber(valueOfFirstIp) : IPNumber_1.IPv6.fromBigInt(valueOfFirstIp);\n let valueOfLastIp = firstIp.value + (size - 1n);\n let lastIp = (0, IPNumber_1.isIPv4)(firstIp) ? IPNumber_1.IPv4.fromNumber(valueOfLastIp) : IPNumber_1.IPv6.fromBigInt(valueOfLastIp);\n return new RangedSet(firstIp, lastIp);\n }\n /**\n * Performs a subtraction operation, where the passed range is removed from the original range.\n *\n * The return range from the subtraction operation could be a single or multiple ranges\n *\n * @param range\n */\n difference(range) {\n if (range.getSize() > (this.getSize())) {\n throw new Error(\"Range is greater than range to be subtracted from\");\n }\n if (!this.contains(range)) {\n throw new Error(\"Range to subtract is not contained in this range\");\n }\n let reminders = [];\n try {\n reminders.push(new RangedSet(this.getFirst(), range.getFirst().previousIPNumber()));\n }\n catch (e) { }\n try {\n reminders.push(new RangedSet(range.getLast().nextIPNumber(), this.getLast()));\n }\n catch (e) { }\n return reminders;\n }\n *take(count) {\n let computed = this.getFirst();\n let returnCount = count === undefined ? this.getSize().valueOf() : count;\n while (returnCount > 0) {\n returnCount--;\n yield computed;\n computed = computed.nextIPNumber();\n }\n }\n *[Symbol.iterator]() {\n yield* this.take();\n }\n toIPv4CidrRange() {\n let candidateRange = new IPv4CidrRange(IPNumber_1.IPv4.fromNumber(this.getFirst().getValue()), Prefix_1.IPv4Prefix.fromRangeSize(this.getSize()));\n if (candidateRange.getFirst().isEquals(this.getFirst())) {\n return candidateRange;\n }\n else {\n throw new Error(\"Range cannot be converted to CIDR\");\n }\n }\n toIPv6CidrRange() {\n let candidateRange = new IPv6CidrRange(IPNumber_1.IPv6.fromBigInt(this.getFirst().getValue()), Prefix_1.IPv6Prefix.fromRangeSize(this.getSize()));\n if (candidateRange.getFirst().isEquals(this.getFirst())) {\n return candidateRange;\n }\n else {\n throw new Error(\"Range cannot be converted to CIDR\");\n }\n }\n}\nexports.RangedSet = RangedSet;\n/**\n * Provides the implementation of functionality that are common to {@link IPv4CidrRange} and {@link IPv6CidrRange}\n */\nclass AbstractIPRange {\n hasNextRange() {\n let sizeOfCurrentRange = this.getSize();\n return ((2n ** this.bitValue) - sizeOfCurrentRange) >= (this.getFirst().getValue() + (sizeOfCurrentRange));\n }\n hasPreviousRange() {\n return this.getSize() <= (this.getFirst().getValue());\n }\n toRangeSet() {\n return new RangedSet(this.getFirst(), this.getLast());\n }\n inside(otherRange) {\n return this.toRangeSet().inside(otherRange.toRangeSet());\n }\n contains(otherRange) {\n if (otherRange instanceof IPNumber_1.AbstractIPNum) {\n const firstValue = this.getFirst().getValue();\n const lastValue = this.getLast().getValue();\n const otherValue = otherRange.getValue();\n return otherValue >= firstValue && otherValue <= lastValue;\n }\n return this.toRangeSet().contains(otherRange.toRangeSet());\n }\n toRangeString() {\n return this.toRangeSet().toRangeString();\n }\n isOverlapping(otherRange) {\n return this.toRangeSet().isOverlapping(otherRange.toRangeSet());\n }\n isConsecutive(otherRange) {\n return this.toRangeSet().isConsecutive(otherRange.toRangeSet());\n }\n isCidrMergeable(otherRange) {\n const count = BigInt((0, BinaryUtils_1.matchingBitCount)(this.getFirst().toBinaryString(), otherRange.getFirst().toBinaryString()));\n if (this.getPrefix().value - count !== 1n) {\n return false;\n }\n return this.isConsecutive(otherRange) && this.getSize() === (otherRange.getSize());\n }\n isMergeable(otherRange) {\n return this.isCidrMergeable(otherRange)\n || this.contains(otherRange)\n || this.inside(otherRange);\n }\n isEquals(otherRange) {\n return this.toRangeSet().isEquals(otherRange.toRangeSet());\n }\n merge(otherRange) {\n if (!this.isCidrMergeable(otherRange)) {\n throw new Error(`Cannot merge. Ranges (${this.toRangeString()},${otherRange.toRangeString()}) are not consecutive and/or of same size`);\n }\n return this.newInstance(this.getFirst(), this.getPrefix().merge());\n }\n /**\n * Returns a lazily evaluated representation of the IP range that produces IP numbers by either:\n *\n * - iterating over using the for of syntax\n * - converting to array using spread syntax\n * - or assigning values to variables using deconstruction\n *\n * @param count the number of IP numbers to lazily evaluate.\n * If none is given, the whole IP range is lazily returned.\n */\n *takeStream(count) {\n return this.toRangeSet().take(count);\n }\n *[Symbol.iterator]() {\n yield* this.toRangeSet();\n }\n}\nexports.AbstractIPRange = AbstractIPRange;\n/**\n * Represents a continuous segment of IPv4 numbers following the\n * classless inter-domain routing scheme for allocating IP addresses.\n *\n * @see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\n */\nclass IPv4CidrRange extends AbstractIPRange {\n /**\n * Convenience method for constructing an instance of an IPv4CidrRange from an IP range represented in CIDR notation\n *\n * @param {string} rangeIncidrNotation the range of the IPv4 number in CIDR notation\n * @returns {IPv4CidrRange} the IPv4CidrRange\n */\n static fromCidr(rangeIncidrNotation) {\n let [isValid, errorMessages] = Validator_1.Validator.isValidIPv4CidrNotation(rangeIncidrNotation);\n if (!isValid) {\n let messages = errorMessages.filter(message => { return message !== ''; });\n throw new Error(messages.join(' and '));\n }\n let cidrComponents = rangeIncidrNotation.split(\"/\");\n let ipString = cidrComponents[0];\n let prefix = BigInt(parseInt(cidrComponents[1]));\n return new IPv4CidrRange(IPNumber_1.IPv4.fromDecimalDottedString(ipString), Prefix_1.IPv4Prefix.fromNumber(prefix));\n }\n /**\n * Constructor for creating an instance of an IPv4 range.\n *\n * The arguments taken by the constructor is inspired by the CIDR notation which basically consists of the IP\n * number and the prefix.\n *\n * @param {IPv4} ipv4 the IP number used to construct the range. By convention this is the first IP number in\n * the range, but it could also be any IP number within the range\n * @param {IPv4Prefix} cidrPrefix the prefix which is a representation of the number of bits used to mask the\n * given IP number in other to create the range\n */\n constructor(ipv4, cidrPrefix) {\n super();\n this.ipv4 = ipv4;\n this.cidrPrefix = cidrPrefix;\n this.bitValue = 32n;\n }\n /**\n * Gets the size of IPv4 numbers contained within the IPv4 range\n *\n * @returns {bigint} the amount of IPv4 numbers in the range\n */\n getSize() {\n return this.cidrPrefix.toRangeSize();\n }\n /**\n * Method that returns the IPv4 range in CIDR (Classless Inter-Domain Routing) notation.\n *\n * See {@link https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation} for more information\n * on the Classless Inter-Domain Routing notation\n *\n * @returns {string} the IPv4 range in CIDR (Classless Inter-Domain Routing) notation\n */\n toCidrString() {\n let first = this.ipv4.toString();\n return `${first.toString()}/${this.cidrPrefix.toString()}`;\n }\n /**\n * Method that returns the IPv4 range in string notation where the first IPv4 number and last IPv4 number are\n * separated by an hyphen. eg. 192.198.0.0-192.198.0.255\n *\n * @returns {string} the range in [first IPv4 number] - [last IPv4 number] format\n */\n toRangeString() {\n return super.toRangeString();\n }\n /**\n * Method that returns the first IPv4 number in the IPv4 range\n *\n * @returns {IPv4} the first IPv4 number in the IPv4 range\n */\n getFirst() {\n return IPNumber_1.IPv4.fromNumber(this.ipv4.getValue() & (this.cidrPrefix.toMask().getValue()));\n }\n /**\n * Method that returns the last IPv4 number in the IPv4 range\n *\n * @returns {IPv4} the last IPv4 number in the IPv4 range\n */\n getLast() {\n return last(this, this.ipv4);\n }\n newInstance(num, prefix) {\n return new IPv4CidrRange(num, prefix);\n }\n getPrefix() {\n return this.cidrPrefix;\n }\n /**\n * Indicates whether the given IPv4 range is an adjacent range.\n *\n * An adjacent range being one where the end of the given range, when incremented by one marks the start of the\n * other range. Or where the start of the given range, when decreased by one, marks the end of the other range\n *\n * @param {IPv4CidrRange} otherRange the other IPv4 range to compare with\n * @returns {boolean} true if the two IPv4 ranges are consecutive, false otherwise\n */\n isConsecutive(otherRange) {\n return super.isConsecutive(otherRange);\n }\n /**\n * Indicates if the given IPv4 range is a subset.\n *\n * By a subset range, it means all the values of the given range are contained by this IPv4 range\n *\n * @param {IPv4CidrRange} otherRange the other IPv4 range\n * @returns {boolean} true if the other Ipv4 range is a subset. False otherwise.\n */\n contains(otherRange) {\n return super.contains(otherRange);\n }\n /**\n * Indicate if the given range is a container range.\n *\n * By container range, it means all the IP number in this current range can be found within the given range.\n *\n * @param {IPv4CidrRange} otherRange he other IPv4 range\n * @returns {boolean} true if the other Ipv4 range is a container range. False otherwise.\n */\n inside(otherRange) {\n return super.inside(otherRange);\n }\n /**\n * Checks if two IPv4 ranges overlap\n * @param {IPv4CidrRange} otherRange the other IPv4 range\n * @returns {boolean} true if the ranges overlap, false otherwise\n */\n isOverlapping(otherRange) {\n return super.isOverlapping(otherRange);\n }\n /**\n * Method that takes IPv4 number from within an IPv4 range, starting from the first IPv4 number\n *\n * @param {bigint} count the amount of IPv4 number to take from the IPv4 range\n * @returns {Array<IPv4>} an array of IPv4 number, taken from the IPv4 range\n */\n take(count) {\n let ipv4s = [this.getFirst()];\n let iteratingIPv4 = this.getFirst();\n if (count > (this.getSize())) {\n let errMessage = Validator_1.Validator.takeOutOfRangeSizeMessage\n .replace(\"$count\", count.toString())\n .replace(\"$size\", this.getSize().toString());\n throw new Error(errMessage);\n }\n for (let counter = 0; counter < count - 1n; counter++) {\n ipv4s.push(iteratingIPv4.nextIPNumber());\n iteratingIPv4 = iteratingIPv4.nextIPNumber();\n }\n return ipv4s;\n }\n /**\n * Method that splits an IPv4 range into two halves\n *\n * @returns {Array<IPv4CidrRange>} An array of two {@link IPv4CidrRange}\n */\n split() {\n let prefixToSplit = this.cidrPrefix.getValue();\n if (prefixToSplit === 32n) {\n throw new Error(\"Cannot split an IP range with a single IP number\");\n }\n let splitCidr = Prefix_1.IPv4Prefix.fromNumber(prefixToSplit + 1n);\n let firstIPOfFirstRange = this.getFirst();\n let firstRange = new IPv4CidrRange(firstIPOfFirstRange, splitCidr);\n let firstIPOfSecondRange = firstRange.getLast().nextIPNumber();\n let secondRange = new IPv4CidrRange(firstIPOfSecondRange, splitCidr);\n return [firstRange, secondRange];\n }\n /**\n * Method that split prefix into ranges of the given prefix,\n * throws an exception if the size of the given prefix is larger than target prefix\n *\n * @param prefix the prefix to use to split\n * @returns {Array<IPv4CidrRange>} An array of two {@link IPv4CidrRange}\n */\n splitInto(prefix) {\n let splitCount = prefix.getValue() - this.cidrPrefix.getValue();\n if (splitCount < 0) {\n throw new Error(\"Prefix to split into is larger than source prefix\");\n }\n else if (splitCount === 0n) {\n return [new IPv4CidrRange(this.getFirst(), prefix)];\n }\n else if (splitCount === 1n) {\n return this.split();\n }\n else {\n let results = this.split();\n while (splitCount > 1) {\n results = results.flatMap(result => result.split());\n splitCount = splitCount - 1n;\n }\n return results;\n }\n }\n /**\n * Returns true if there is an adjacent IPv4 cidr range of exactly the same size next to this range\n */\n hasNextRange() {\n return super.hasNextRange();\n }\n /**\n * Returns true if there is an adjacent IPv4 cidr range of exactly the same size previous to this range\n */\n hasPreviousRange() {\n return super.hasPreviousRange();\n }\n /**\n * Return the next IPv6 cidr range, or undefined if no next range\n */\n nextRange() {\n if (this.hasNextRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfNextRange = this.getFirst().getValue() + (sizeOfCurrentRange);\n return new IPv4CidrRange(new IPNumber_1.IPv4(startOfNextRange), this.cidrPrefix);\n }\n return;\n }\n /**\n * Return the previous IPv6 cidr range, or undefined if no next range\n */\n previousRange() {\n if (this.hasPreviousRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfPreviousRange = this.getFirst().getValue() - (sizeOfCurrentRange);\n return new IPv4CidrRange(new IPNumber_1.IPv4(startOfPreviousRange), this.cidrPrefix);\n }\n return;\n }\n}\nexports.IPv4CidrRange = IPv4CidrRange;\n/**\n * Represents a continuous segment of IPv6 number following the\n * classless inter-domain routing scheme for allocating IP addresses.\n *\n * @see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\n */\nclass IPv6CidrRange extends AbstractIPRange {\n /**\n * Convenience method for constructing an instance of an IPV6Range from an IP range represented in CIDR notation\n *\n * @param {string} rangeInCidrNotation the range of the IPv6 number in CIDR notation\n * @returns {IPv6CidrRange} the IPV6Range\n */\n static fromCidr(rangeInCidrNotation) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6CidrNotation(rangeInCidrNotation);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let cidrComponents = rangeInCidrNotation.split(\"/\");\n let ipString = cidrComponents[0];\n let prefix = BigInt(parseInt(cidrComponents[1]));\n return new IPv6CidrRange(IPNumber_1.IPv6.fromHexadecatet(ipString), Prefix_1.IPv6Prefix.fromNumber(prefix));\n }\n ;\n /**\n * Constructor for creating an instance of an IPv6 range.\n *\n * The arguments taken by the constructor is inspired by the CIDR notation which basically consists of the IP\n * number and the prefix.\n *\n * @param {IPv6} ipv6 the IP number used to construct the range. By convention this is the first IP number in\n * the range, but it could also be any IP number within the range\n * @param {IPv6Prefix} cidrPrefix the prefix which is a representation of the number of bits used to mask the\n * given IPv6 number in other to create the range\n */\n constructor(ipv6, cidrPrefix) {\n super();\n this.ipv6 = ipv6;\n this.cidrPrefix = cidrPrefix;\n this.bitValue = 128n;\n }\n /**\n * Gets the size of IPv6 numbers contained within the IPv6 range\n *\n * @returns {bigint} the amount of IPv6 numbers in the range\n */\n getSize() {\n return this.cidrPrefix.toRangeSize();\n }\n /**\n * Method that returns the IPv6 range in CIDR (Classless Inter-Domain Routing) notation.\n *\n * See {@link https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation} for more information\n * on the Classless Inter-Domain Routing notation\n *\n * @returns {string} the IPv6 range in CIDR (Classless Inter-Domain Routing) notation\n */\n toCidrString() {\n let first = this.ipv6.toString();\n return `${first.toString()}/${this.cidrPrefix.toString()}`;\n }\n /**\n * Method that returns the IPv6 range in string notation where the first IPv6 number and last IPv6 number are\n * separated by an hyphen. eg. \"2001:db8:0:0:0:0:0:0-2001:db8:0:ffff:ffff:ffff:ffff:ffff\"\n *\n * @returns {string} the range in [first IPv6 number] - [last IPv6 number] format\n */\n toRangeString() {\n return super.toRangeString();\n }\n /**\n * Method that returns the first IPv6 number in the IPv6 range\n *\n * @returns {IPv6} the first IPv6 number in the IPv6 range\n */\n getFirst() {\n return IPNumber_1.IPv6.fromBigInt(this.ipv6.getValue() & (this.cidrPrefix.toMask().getValue()));\n }\n /**\n * Method that returns the last IPv6 number in the IPv6 range\n *\n * @returns {IPv6} the last IPv6 number in the IPv6 range\n */\n getLast() {\n return last(this, this.ipv6);\n }\n newInstance(num, prefix) {\n return new IPv6CidrRange(num, prefix);\n }\n getPrefix() {\n return this.cidrPrefix;\n }\n /**\n * Indicates whether the given IPv6 range is an adjacent range.\n *\n * An adjacent range being one where the end of the given range, when incremented by one marks the start of the\n * other range. Or where the start of the given range, when decreased by one, marks the end of the other range\n *\n * @param {IPv6CidrRange} otherRange the other IPv6 range to compare with\n * @returns {boolean} true if the two IPv6 ranges are consecutive, false otherwise\n */\n isConsecutive(otherRange) {\n return super.isConsecutive(otherRange);\n }\n /**\n * Indicates if the given IPv6 range is a subset.\n *\n * By a subset range, it means all the values of the given range are contained by this IPv6 range\n *\n * @param {IPv6CidrRange} otherRange the other IPv6 range\n * @returns {boolean} true if the other Ipv6 range is a subset. False otherwise.\n */\n contains(otherRange) {\n return super.contains(otherRange);\n }\n /**\n * Indicate if the given range is a container range.\n *\n * By container range, it means all the IP number in this current range can be found within the given range.\n *\n * @param {IPv6CidrRange} otherRange he other IPv6 range\n * @returns {boolean} true if the other Ipv6 range is a container range. False otherwise.\n */\n inside(otherRange) {\n return super.inside(otherRange);\n }\n /**\n * Checks if two IPv6 ranges overlap\n * @param {IPv6CidrRange} otherRange the other IPv6 range\n * @returns {boolean} true if the ranges overlap, false otherwise\n */\n isOverlapping(otherRange) {\n return super.isOverlapping(otherRange);\n }\n /**\n * Method that takes IPv6 number from within an IPv6 range, starting from the first IPv6 number\n *\n * @param {bigint} count the amount of IPv6 number to take from the IPv6 range\n * @returns {Array<IPv6>} an array of IPv6 number, taken from the IPv6 range\n */\n take(count) {\n let iPv6s = [this.getFirst()];\n let iteratingIPv6 = this.getFirst();\n if (count > (this.getSize())) {\n throw new Error(`${count.toString()} is greater than ${this.getSize().toString()}, the size of the range`);\n }\n for (var counter = 0; counter < count - 1n; counter++) {\n iPv6s.push(iteratingIPv6.nextIPNumber());\n iteratingIPv6 = iteratingIPv6.nextIPNumber();\n }\n return iPv6s;\n }\n /**\n * Method that splits an IPv6 cidr range into two halves\n *\n * @returns {Array<IPv6CidrRange>} An array of two {@link IPv6CidrRange}\n */\n split() {\n let prefixToSplit = this.cidrPrefix.getValue();\n if (prefixToSplit === 128n) {\n throw new Error(\"Cannot split an IP range with a single IP number\");\n }\n let splitCidr = Prefix_1.IPv6Prefix.fromNumber(prefixToSplit + 1n);\n let firstIPOfFirstRange = this.getFirst();\n let firstRange = new IPv6CidrRange(firstIPOfFirstRange, splitCidr);\n let firstIPOfSecondRange = firstRange.getLast().nextIPNumber();\n let secondRange = new IPv6CidrRange(firstIPOfSecondRange, splitCidr);\n return [firstRange, secondRange];\n }\n /**\n * Method that split prefix into ranges of the given prefix,\n * throws an exception if the size of the given prefix is larger than target prefix\n *\n * @param prefix the prefix to use to split\n * @returns {Array<IPv6CidrRange>} An array of two {@link IPv6CidrRange}\n */\n splitInto(prefix) {\n let splitCount = prefix.getValue() - this.cidrPrefix.getValue();\n if (splitCount < 0) {\n throw new Error(\"Prefix to split into is larger than source prefix\");\n }\n else if (splitCount === 0n) {\n return [new IPv6CidrRange(this.getFirst(), prefix)];\n }\n else if (splitCount === 1n) {\n return this.split();\n }\n else {\n let results = this.split();\n while (splitCount > 1) {\n results = results.flatMap(result => result.split());\n splitCount = splitCount - 1n;\n }\n return results;\n }\n }\n /**\n * Returns true if there is an adjacent IPv6 cidr range of exactly the same size next to this range\n */\n hasNextRange() {\n return super.hasNextRange();\n }\n /**\n * Returns true if there is an adjacent IPv6 cidr range of exactly the same size previous to this range\n */\n hasPreviousRange() {\n return super.hasPreviousRange();\n }\n /**\n * Return the next IPv6 cidr range, or undefined if no next range\n */\n nextRange() {\n if (this.hasNextRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfNextRange = this.getFirst().getValue() + (sizeOfCurrentRange);\n return new IPv6CidrRange(new IPNumber_1.IPv6(startOfNextRange), this.cidrPrefix);\n }\n return;\n }\n /**\n * Return the previous IPv6 cidr range, or undefined if no next range\n */\n previousRange() {\n if (this.hasPreviousRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfPreviousRange = this.getFirst().getValue() - sizeOfCurrentRange;\n return new IPv6CidrRange(new IPNumber_1.IPv6(startOfPreviousRange), this.cidrPrefix);\n }\n return;\n }\n}\nexports.IPv6CidrRange = IPv6CidrRange;\n// utility functions shared by both IPv6CidrRange and IPv4CidrRange\nlet last = (range, ip) => {\n let bitValue = Number(range.bitValue.valueOf());\n let maskSize = BigInt(`0b${\"1\".repeat(bitValue)}`);\n let maskAsBigInteger = range.cidrPrefix.toMask().getValue();\n let invertedMask = (0, BinaryUtils_1.leftPadWithZeroBit)((maskAsBigInteger ^ (maskSize)).toString(2), bitValue);\n if (isIPv4CidrRange(range)) {\n return IPNumber_1.IPv4.fromNumber((ip.getValue()) | ((0, BinaryUtils_1.parseBinaryStringToBigInt)(invertedMask)));\n }\n else {\n return IPNumber_1.IPv6.fromBigInt((ip.getValue()) | ((0, BinaryUtils_1.parseBinaryStringToBigInt)(invertedMask)));\n }\n};\nfunction isIPv4CidrRange(ip) {\n return ip.bitValue.valueOf() === 32n;\n}\n//# sourceMappingURL=IPRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pool = void 0;\nconst IPRange_1 = require(\"./IPRange\");\nconst Prefix_1 = require(\"./Prefix\");\n/**\n * Represents a collection of IP {@link RangedSet}'s\n */\nclass Pool {\n /**\n * Convenient method for creating an instance from arrays of {@link IPv4} or {@link IPv6}\n * @param ipNumbers the arrays of {@link IPv4} or {@link IPv6} that will make up the pool.\n */\n static fromIP(ipNumbers) {\n let ranges = ipNumbers.map((ip) => {\n return IPRange_1.RangedSet.fromSingleIP(ip);\n });\n return new Pool(ranges);\n }\n /**\n * Convenient method for creating an instance from arrays of {@link RangedSet}.\n *\n * @param ipRanges the arrays of {@link RangedSet}'s that will make up the pool.\n */\n // TODO: TSE: This makes it possible to create an instance containing both Range set of IPv4 and IPv6\n static fromRangeSet(ipRanges) {\n return new Pool(ipRanges);\n }\n /**\n * Convenient method for creating an instance from arrays of {@link IPv4CidrRange} or {@link IPv6CidrRange}.\n *\n * @param cidrRanges the arrays of {@link IPv4CidrRange} or {@link IPv6CidrRange} that will make up the pool.\n */\n static fromCidrRanges(cidrRanges) {\n let cidr = cidrRanges;\n let rangeSet = cidr.map((range) => {\n return range.toRangeSet();\n });\n return new Pool(rangeSet);\n }\n /**\n * Constructor for an IP pool.\n *\n * Creates a Pool of IP ranges from supplied {@link RangedSet}'s\n *\n * @param ranges the array of IP ranges that would make up the pool.\n */\n constructor(ranges) {\n this.backingSet = new SortedSet();\n ranges.forEach(range => {\n this.backingSet.add(range);\n });\n }\n /**\n * Returns an array of {@link RangedSet}'s that is contained within the pool\n */\n getRanges() {\n return this.backingSet.asArray();\n }\n /**\n * Returns an new {@link Pool} with all the IP ranges aggregated\n */\n aggregate() {\n let sortedRanges = this.backingSet.asArray();\n let mergedRanges = sortedRanges.reduce((accumulator, currentRange, currentIndex, array) => {\n if (accumulator.length == 0) {\n accumulator.push(currentRange);\n return accumulator;\n }\n else {\n let previous = accumulator.pop();\n let previousCidrRange = previous.toCidrRange();\n let currentCidrRange = currentRange.toCidrRange();\n if (previousCidrRange.isCidrMergeable(currentCidrRange)) {\n let merged = previousCidrRange.merge(currentCidrRange);\n accumulator.push(merged.toRangeSet());\n return accumulator;\n }\n else {\n if (!previous.contains(currentRange)) {\n accumulator.push(previous);\n accumulator.push(currentRange);\n }\n else {\n accumulator.push(previous);\n }\n return accumulator;\n }\n }\n }, []);\n let aggregatedPool = Pool.fromRangeSet(mergedRanges);\n if (aggregatedPool.getRanges().length !== this.getRanges().length) {\n return aggregatedPool.aggregate();\n }\n else {\n return aggregatedPool;\n }\n }\n /**\n * Gets a single range of size of the given prefix from pool.\n * Only returns a range if there is a single range in the pool of same size or greater than given prefix.\n *\n * throws exception if the requested range cannot be got from the pool.\n *\n * @param prefix prefix range to retrieve\n * TODO TSE\n */\n getCidrRange(prefix) {\n if (prefix.toRangeSize() > (this.getSize())) {\n throw new Error(`Not enough IP number in the pool for requested prefix: ${prefix}`);\n }\n let selectedCidrRange;\n let error;\n loop: for (let range of this.getRanges()) {\n for (let offset = 0n; offset + (prefix.toRangeSize()) <= (range.getSize()); offset = offset + 1n)\n try {\n let selectedRange = range.takeSubRange(offset, prefix.toRangeSize());\n selectedCidrRange = selectedRange.toCidrRange();\n let remaining = range.difference(selectedRange);\n this.removeExact(range);\n this.add(remaining);\n break loop;\n }\n catch (e) {\n if (e instanceof RangeError) {\n continue loop;\n }\n error = e instanceof Error ? e : new Error(String(e));\n }\n }\n if (selectedCidrRange) {\n return selectedCidrRange;\n }\n else {\n throw (error === undefined ? new Error(`No range big enough in the pool for requested prefix: ${prefix}`) : error);\n }\n }\n /**\n * Gets a single or multiple ranges that fulfils the given prefix from the pool.\n *\n * throws exception if the requested range cannot be got from the pool.\n *\n * @param reqprefix prefix range to retrieve\n */\n getCidrRanges(reqprefix) {\n if (reqprefix.toRangeSize() > (this.getSize())) {\n throw new Error(\"Prefix greater than pool\");\n }\n let go = (reqprefix, prefix, accummulated) => {\n try {\n let singleCidrRange = this.getCidrRange(prefix);\n accummulated.push(singleCidrRange);\n let currentSize = accummulated.reduce((previous, current) => {\n return previous + (current.getSize());\n }, 0n);\n if (reqprefix.toRangeSize() === (currentSize)) {\n return accummulated;\n }\n else {\n return go(reqprefix, prefix, accummulated);\n }\n }\n catch (e) {\n let lowerPrefix = (0, Prefix_1.isIPv4Prefix)(prefix) ?\n Prefix_1.IPv4Prefix.fromNumber(prefix.getValue() + 1n) : Prefix_1.IPv6Prefix.fromNumber(prefix.getValue() + 1n);\n return go(reqprefix, lowerPrefix, accummulated);\n }\n };\n return go(reqprefix, reqprefix, []);\n }\n /**\n * Returns the size of IP numbers in the pool\n */\n getSize() {\n return this\n .aggregate()\n .getRanges()\n .reduce((previous, current) => {\n return previous + current.getSize();\n }, 0n);\n }\n /**\n * Empties the pool and fill it with given ranges\n *\n * @param ipRanges the range to fill the pool with after emptying\n */\n resetWith(ipRanges) {\n this.backingSet.clear();\n this.backingSet = this.backingSet.add(ipRanges);\n }\n /**\n * Removes the given range from the pool. It only removes if the exact range exist in the pool.\n * It is a Noop and returns false, if the given range does not exist in the pool. Returns true otherwise\n *\n * @param rangeToRemove range to remove from ppol\n */\n removeExact(rangeToRemove) {\n let updatedSet = this.backingSet.removeExact(rangeToRemove);\n let isUpdated = !this.backingSet.isEquals(updatedSet);\n this.backingSet = updatedSet;\n return isUpdated;\n }\n /**\n * Removes the given range from the pool. If the given range overlaps, then it removes the overlapping portion.\n * It is a Noop and returns false, if the given range does not exist in the pool. Returns true otherwise\n *\n * @param rangeToRemove range to remove from ppol\n */\n removeOverlapping(rangeToRemove) {\n let updatedSet = this.backingSet.removeOverlapping(rangeToRemove);\n let isUpdated = !this.backingSet.isEquals(updatedSet);\n this.backingSet = updatedSet;\n return isUpdated;\n }\n /**\n * Adds the given range to the pool.\n *\n * @param range to add to pool.\n */\n add(range) {\n this.backingSet = this.backingSet.add(range);\n }\n /**\n * Removes all ranges from pool\n */\n clear() {\n this.backingSet.clear();\n }\n}\nexports.Pool = Pool;\nclass SortedSet {\n sortArray(array) {\n array.sort((a, b) => {\n if (a.isLessThan(b)) {\n return -1;\n }\n if (a.isGreaterThan(b)) {\n return 1;\n }\n return 0;\n });\n return array;\n }\n constructor(array) {\n if (array) {\n this.backingArray = this.sortArray(array);\n }\n else {\n this.backingArray = new Array();\n }\n }\n asArray() {\n return this.backingArray;\n }\n isEquals(other) {\n if (this.backingArray.length !== other.asArray().length) {\n return false;\n }\n return this.backingArray.every((value, index) => {\n return value.getSize() === (other.asArray()[index].getSize());\n });\n }\n add(item) {\n let array = this.backingArray;\n if (\"push\" in item) {\n array = array.concat(item);\n }\n else {\n array.push(item);\n }\n return new SortedSet(this.sortArray(array));\n }\n removeExact(items) {\n let filtered = this.backingArray\n .filter(currentItem => {\n if (\"push\" in items) {\n return items.find(item => item.isEquals(currentItem)) !== undefined;\n }\n else {\n return !items.isEquals(currentItem);\n }\n });\n return new SortedSet(this.sortArray(filtered));\n }\n removeOverlapping(items) {\n let filtered = this.backingArray\n .flatMap(backingItem => {\n if (\"push\" in items) {\n return items.flatMap(item => {\n if (backingItem.contains(item)) {\n return backingItem.difference(item);\n }\n else if (backingItem.inside(item)) {\n return new Array();\n }\n else if (backingItem.isOverlapping(item)) {\n return [backingItem.subtract(item)];\n }\n else {\n return [item];\n }\n });\n }\n else {\n try {\n return backingItem.difference(items);\n }\n catch (e) {\n return backingItem;\n }\n }\n });\n return new SortedSet(this.sortArray(filtered));\n }\n clear() {\n this.backingArray = [];\n }\n}\n//# sourceMappingURL=IPPool.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Exposes all the library's modules making them available from the \"ip-num\" module.\n * Making it possible to get access to all any of the modules by doing require(\"ip-num\")\n *\n * @example\n * let ipNum = require(\"ip-num\")\n * ipNum.IPv4CidrRange // gets access to IPv4CidrRange\n * ipNum.Asn // gets access to Asn\n */\n__exportStar(require(\"./BinaryUtils\"), exports);\n__exportStar(require(\"./Hexadecatet\"), exports);\n__exportStar(require(\"./HexadecimalUtils\"), exports);\n__exportStar(require(\"./IPNumber\"), exports);\n__exportStar(require(\"./IPNumType\"), exports);\n__exportStar(require(\"./IPPool\"), exports);\n__exportStar(require(\"./IPRange\"), exports);\n__exportStar(require(\"./IPv6Utils\"), exports);\n__exportStar(require(\"./Octet\"), exports);\n__exportStar(require(\"./Prefix\"), exports);\n__exportStar(require(\"./Validator\"), exports);\n//# sourceMappingURL=index.js.map","import { t } from \"i18next\";\nimport { IPv4, IPv6, Validator } from \"ip-num\";\nimport { assoc, isNil, isNotNil } from \"ramda\";\nimport * as yup from \"yup\";\n\nconst toLabelAndValue = value => ({\n label: humanizeIpAddressFormat(value),\n value,\n});\n\nconst isValidIPv4String = ip =>\n isNotNil(ip) && Validator.isValidIPv4String(ip)[0];\n\nconst isValidIPv6String = ip =>\n isNotNil(ip) && Validator.isValidIPv6String(ip)[0];\n\nconst isValidIpString = ip => isValidIPv4String(ip) || isValidIPv6String(ip);\n\nconst areIpAddressesInSameFormat = (ipStart, ipEnd) =>\n (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) ||\n (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd));\n\nconst isValidIPv4Range = (ipStart, ipEnd) => {\n const ipStartAddr = IPv4.fromDecimalDottedString(ipStart);\n const ipEndAddr = IPv4.fromDecimalDottedString(ipEnd);\n\n return ipStartAddr.isLessThanOrEquals(ipEndAddr);\n};\n\nconst isValidIPv6Range = (ipStart, ipEnd) => {\n const ipStartAddr = IPv6.fromString(ipStart);\n const ipEndAddr = IPv6.fromString(ipEnd);\n\n return ipStartAddr.isLessThanOrEquals(ipEndAddr);\n};\n\nconst isValidIPRange = (ipStart, ipEnd) => {\n if (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) {\n return isValidIPv4Range(ipStart, ipEnd);\n }\n\n if (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd)) {\n return isValidIPv6Range(ipStart, ipEnd);\n }\n\n return false;\n};\n\nyup.addMethod(yup.string, \"validIp\", function (errorMessage) {\n return this.test(\"valid-ip\", errorMessage, function (value) {\n if (isNil(value)) {\n return this;\n }\n\n const isValidIp = isValidIpString(value);\n\n return (\n isValidIp || this.createError({ path: this.path, message: errorMessage })\n );\n });\n});\n\nexport const getIpRestrictionValidationSchema = () =>\n yup.object().shape({\n ipStart: yup\n .string()\n .validIp(t(\"neetoMolecules.ipRestriction.validations.invalidIp\"))\n .required(t(\"neetoMolecules.ipRestriction.validations.ipStartRequired\")),\n ipEnd: yup\n .string()\n .validIp(t(\"neetoMolecules.ipRestriction.validations.invalidIp\"))\n .when(\"ipStart\", (ipStart, schema) =>\n schema.test({\n test: ipEnd => areIpAddressesInSameFormat(ipStart, ipEnd),\n message: t(\n \"neetoMolecules.ipRestriction.validations.eitherIpv4OrIpv6\"\n ),\n })\n )\n .when(\"ipStart\", (ipStart, schema) =>\n schema.test({\n test: ipEnd => isValidIPRange(ipStart, ipEnd),\n message: t(\n \"neetoMolecules.ipRestriction.validations.ipEndGreaterThanIpStart\"\n ),\n })\n )\n .required(t(\"neetoMolecules.ipRestriction.validations.ipEndRequired\")),\n addressType: yup\n .object()\n .shape({\n value: yup.string().required(),\n label: yup.string().required(),\n })\n .nullable()\n .required(\n t(\"neetoMolecules.ipRestriction.validations.addressTypeRequired\")\n ),\n });\n\nexport const humanizeIpAddressFormat = addressFormat => {\n const addressFormats = { ipv4: \"IPv4\", ipv6: \"IPv6\" };\n\n return addressFormats[addressFormat];\n};\n\nexport const buildInitialValue = (isIpRestrictionEnabled, allowedIpRanges) => ({\n ipRestriction: isIpRestrictionEnabled,\n allowedIpRanges: buildAllowedIpRangesFormData(allowedIpRanges),\n});\n\nexport const buildAllowedIpRangesFormData = allowedIpRanges =>\n allowedIpRanges?.map(allowedIpRange =>\n assoc(\n \"addressType\",\n toLabelAndValue(allowedIpRange.addressType),\n allowedIpRange\n )\n );\n\nexport const buildIpRestrictionPayload = values => {\n const allowedIpRangesWithTransformedAddressType = values.allowedIpRanges.map(\n allowedIpRange =>\n assoc(\"addressType\", allowedIpRange.addressType.value, allowedIpRange)\n );\n\n return {\n isIpRestrictionEnabled: values.ipRestriction,\n allowedIpRanges: allowedIpRangesWithTransformedAddressType,\n };\n};\n","import { t } from \"i18next\";\nimport * as yup from \"yup\";\n\nimport { getIpRestrictionValidationSchema } from \"./utils\";\n\nexport const IP_RESTRICTIONS_ENGINE_BASE_URL = \"/neeto_ip_restrictions/api/v1\";\n\nexport const QUERY_KEYS = {\n IP_RESTRICTION: \"IP_RESTRICTION\",\n ALLOWED_IP_RANGES: \"ALLOWED_IP_RANGES\",\n CURRENT_IP: \"CURRENT_IP\",\n};\n\nexport const TRUNCATE_LENGTH = 18;\n\nexport const ADDRESS_TYPE_SELECT_OPTIONS = [\n { label: t(\"neetoMolecules.ipRestriction.ipv4\"), value: \"ipv4\" },\n { label: t(\"neetoMolecules.ipRestriction.ipv6\"), value: \"ipv6\" },\n];\n\nexport const INITIAL_VALUES = {\n ipStart: \"\",\n ipEnd: \"\",\n addressType: ADDRESS_TYPE_SELECT_OPTIONS[0].value,\n};\n\nexport const VALIDATION_SCHEMA = yup.object().shape({\n ipRestriction: yup.boolean(),\n allowedIpRanges: yup.array().of(getIpRestrictionValidationSchema()),\n});\n\nexport const NEW_ALLOWED_IP_RANGE = {\n ipStart: \"\",\n ipEnd: \"\",\n addressType: null,\n createdAt: new Date().toISOString(),\n};\n","import withT from \"neetocommons/react-utils/withT\";\nimport { Delete } from \"neetoicons\";\nimport { Button } from \"neetoui\";\nimport { Input, Select } from \"neetoui/formik\";\n\nimport { ADDRESS_TYPE_SELECT_OPTIONS } from \"../constants\";\n\nconst AllowedIpRange = withT(({ t, index, arrayHelpers }) => (\n <div className=\"flex items-start gap-3\">\n <div className=\"grid flex-grow grid-cols-1 gap-3 md:grid-cols-3\">\n <Input\n className=\"text-start\"\n data-cy=\"ip-start-text-field\"\n label={t(\"neetoMolecules.ipRestriction.ipStart\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.ipStart`}\n placeholder={t(\"neetoMolecules.ipRestriction.ipStart\")}\n />\n <Input\n className=\"text-start\"\n data-cy=\"ip-end-text-field\"\n label={t(\"neetoMolecules.ipRestriction.ipEnd\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.ipEnd`}\n placeholder={t(\"neetoMolecules.ipRestriction.ipEnd\")}\n />\n <Select\n className=\"text-start\"\n data-testid=\"address-type-select-field\"\n label={t(\"neetoMolecules.ipRestriction.type\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.addressType`}\n options={ADDRESS_TYPE_SELECT_OPTIONS}\n />\n </div>\n <div className=\"flex flex-shrink-0 justify-center md:min-w-14\">\n <Button\n className=\"mt-5 md:mt-0\"\n data-cy=\"allowed-ip-range-delete-button\"\n data-testid=\"allowed-ip-range-delete-btn\"\n icon={Delete}\n style=\"text\"\n tooltipProps={{\n content: t(\"neetoMolecules.common.actions.discard\"),\n position: \"top\",\n touch: [\"hold\", 500],\n }}\n onClick={() => arrayHelpers.remove(index)}\n />\n </div>\n </div>\n));\n\nexport default AllowedIpRange;\n","import { memo } from \"react\";\n\nimport { FieldArray } from \"formik\";\nimport withT from \"neetocommons/react-utils/withT\";\nimport { Plus } from \"neetoicons\";\nimport { Button, Typography } from \"neetoui\";\n\nimport AllowedIpRange from \"./AllowedIpRange\";\n\nimport { NEW_ALLOWED_IP_RANGE } from \"../constants\";\n\nconst AllowedIpRanges = withT(({ t }) => (\n <div className=\"flex flex-col gap-y-5\" data-cy=\"allowed-ip-range-container\">\n <Typography data-cy=\"allowed-ip-range-heading\" style=\"h4\">\n {t(\"neetoMolecules.ipRestriction.allowedIpRangeTitle\")}\n </Typography>\n <div className=\"flex flex-col gap-y-3\">\n <div className=\"hidden gap-3 md:flex\">\n <div className=\"grid flex-grow grid-cols-3 gap-3\">\n <Typography className=\"neeto-ui-text-gray-700 uppercase\" style=\"h6\">\n {t(\"neetoMolecules.ipRestriction.ipStart\")}*\n </Typography>\n <Typography className=\"neeto-ui-text-gray-700 uppercase\" style=\"h6\">\n {t(\"neetoMolecules.ipRestriction.ipEnd\")}*\n </Typography>\n <Typography className=\"neeto-ui-text-gray-700 uppercase\" style=\"h6\">\n {t(\"neetoMolecules.ipRestriction.type\")}*\n </Typography>\n </div>\n <div className=\"min-w-14 flex-shrink-0\">\n <Typography\n className=\"neeto-ui-text-gray-700 text-center uppercase\"\n style=\"h6\"\n >\n {t(\"neetoMolecules.ipRestriction.actions\")}\n </Typography>\n </div>\n </div>\n <div className=\"flex w-full flex-col gap-y-6 md:gap-y-4\">\n <FieldArray name=\"allowedIpRanges\">\n {arrayHelpers => (\n <>\n {arrayHelpers.form.values.allowedIpRanges.map(\n (allowedIpRange, index) => (\n <div\n className=\"neeto-ui-border-gray-300 w-full border-b pb-6 last:border-none last:pb-0 md:border-none md:pb-0\"\n key={index}\n >\n <AllowedIpRange\n {...{ allowedIpRange, arrayHelpers, index }}\n key={allowedIpRange.createdAt}\n />\n </div>\n )\n )}\n <Button\n className=\"md:mt-2\"\n data-cy=\"add-allowed-ip-range-button\"\n icon={Plus}\n iconPosition=\"left\"\n label={t(\"neetoMolecules.ipRestriction.addNew\")}\n style=\"link\"\n onClick={() => arrayHelpers.push(NEW_ALLOWED_IP_RANGE)}\n />\n </>\n )}\n </FieldArray>\n </div>\n </div>\n </div>\n));\n\nexport default memo(AllowedIpRanges);\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst show = params =>\n axios.get(`${IP_RESTRICTIONS_ENGINE_BASE_URL}/current_ip`, { params });\n\nconst currentIpApi = { show };\n\nexport default currentIpApi;\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport currentIpApi from \"../../apis/current_ip\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { CURRENT_IP } = QUERY_KEYS;\n\nconst useShowCurrentIp = () =>\n useQuery({\n queryKey: [CURRENT_IP],\n queryFn: () => currentIpApi.show(),\n });\n\nexport { useShowCurrentIp };\n","import { memo } from \"react\";\n\nimport { Typography } from \"neetoui\";\nimport { Trans } from \"react-i18next\";\n\nimport { useShowCurrentIp } from \"./hooks/reactQuery/useCurrentIp\";\n\nconst CurrentIp = () => {\n const { data, isLoading } = useShowCurrentIp();\n\n return (\n <div\n className=\"flex flex-wrap items-baseline gap-1\"\n data-cy=\"current-ip-container\"\n >\n <Typography>\n <Trans\n i18nKey=\"neetoMolecules.ipRestriction.currentIpMessage\"\n values={{ ip: isLoading ? \"...\" : data.ip }}\n />\n </Typography>\n </div>\n );\n};\n\nexport default memo(CurrentIp);\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst allowedIpRangesUrl = `${IP_RESTRICTIONS_ENGINE_BASE_URL}/allowed_ips`;\n\nconst fetch = () => axios.get(allowedIpRangesUrl);\n\nconst create = payload =>\n axios.post(allowedIpRangesUrl, { allowedIpRange: payload });\n\nconst destroy = id => axios.delete(`${allowedIpRangesUrl}/${id}`);\n\nconst update = ({ id, payload }) =>\n axios.patch(`${allowedIpRangesUrl}/${id}`, {\n allowedIpRange: payload,\n });\n\nconst allowedIpRangesApi = { fetch, create, destroy, update };\n\nexport default allowedIpRangesApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport useMutationWithInvalidation from \"neetocommons/react-utils/useMutationWithInvalidation\";\n\nimport allowedIpRangesApi from \"../../apis/allowed_ip_ranges\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { ALLOWED_IP_RANGES } = QUERY_KEYS;\n\nconst useFetchAllowedIpRanges = options =>\n useQuery({\n queryKey: [ALLOWED_IP_RANGES],\n queryFn: () => allowedIpRangesApi.fetch(),\n ...options,\n });\n\nconst useCreateAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.create, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nconst useDestroyAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.destroy, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nconst useUpdateAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.update, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nexport {\n useFetchAllowedIpRanges,\n useCreateAllowedIpRanges,\n useDestroyAllowedIpRanges,\n useUpdateAllowedIpRanges,\n};\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst ipRestrictionUrl = `${IP_RESTRICTIONS_ENGINE_BASE_URL}/ip_restriction`;\n\nconst update = params =>\n axios.patch(ipRestrictionUrl, { ipRestriction: params });\n\nconst show = () => axios.get(ipRestrictionUrl);\n\nconst ipRestrictionApi = { update, show };\n\nexport default ipRestrictionApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport useMutationWithInvalidation from \"neetocommons/react-utils/useMutationWithInvalidation\";\n\nimport ipRestrictionApi from \"../../apis/ip_restriction\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { IP_RESTRICTION, ALLOWED_IP_RANGES } = QUERY_KEYS;\n\nconst useShowIpRestriction = () =>\n useQuery({\n queryKey: [IP_RESTRICTION],\n queryFn: () => ipRestrictionApi.show(),\n });\n\nconst useUpdateIpRestriction = () =>\n useMutationWithInvalidation(ipRestrictionApi.update, {\n keysToInvalidate: [[IP_RESTRICTION], [ALLOWED_IP_RANGES]],\n });\n\nexport { useShowIpRestriction, useUpdateIpRestriction };\n","import { memo, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport { Typography, Alert, Callout, Button, Spinner } from \"neetoui\";\nimport {\n Form as NeetoUIForm,\n Switch,\n Button as FormikButton,\n BlockNavigation,\n} from \"neetoui/formik\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport CardLayout from \"components/CardLayout\";\n\nimport AllowedIpRanges from \"./AllowedIpRanges\";\nimport { VALIDATION_SCHEMA } from \"./constants\";\nimport CurrentIp from \"./CurrentIp\";\nimport { useFetchAllowedIpRanges } from \"./hooks/reactQuery/useAllowedIpRanges\";\nimport {\n useShowIpRestriction,\n useUpdateIpRestriction,\n} from \"./hooks/reactQuery/useIpRestrictions\";\nimport \"./IpRestriction.scss\";\nimport { buildInitialValue, buildIpRestrictionPayload } from \"./utils\";\n\nconst IpRestriction = () => {\n const { t } = useTranslation();\n const [isAlertOpen, setIsAlertOpen] = useState(false);\n\n const {\n data: { isIpRestrictionEnabled } = {},\n isLoading: isFetchingIpRestriction,\n } = useShowIpRestriction();\n\n const {\n data: allowedIpRanges,\n isLoading: isFetchingAllowedIpRanges,\n isRefetching,\n } = useFetchAllowedIpRanges({ enabled: isIpRestrictionEnabled });\n\n const { mutate: updateIpRestriction, isPending: isUpdating } =\n useUpdateIpRestriction();\n\n if (isFetchingIpRestriction || isFetchingAllowedIpRanges || isRefetching) {\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n <Spinner />\n </div>\n );\n }\n\n const handleSubmit = (values, formikBag) => {\n if (values.ipRestriction) setIsAlertOpen(true);\n else handleUpdateIpRestriction(values, formikBag);\n };\n\n const handleCloseAlert = setSubmitting => {\n setIsAlertOpen(false);\n setSubmitting(false);\n };\n\n const handleUpdateIpRestriction = (values, { setSubmitting, resetForm }) => {\n updateIpRestriction(buildIpRestrictionPayload(values), {\n onSuccess: () => {\n setIsAlertOpen(false);\n setSubmitting(false);\n resetForm({ values });\n },\n onError: () => {\n setIsAlertOpen(false);\n setSubmitting(false);\n },\n });\n };\n\n return (\n <NeetoUIForm\n className=\"w-full\"\n formikProps={{\n initialValues: buildInitialValue(\n isIpRestrictionEnabled,\n allowedIpRanges\n ),\n validationSchema: VALIDATION_SCHEMA,\n validateOnBlur: true,\n enableReinitialize: true,\n onSubmit: handleSubmit,\n }}\n >\n {({ values, dirty, setFieldValue, resetForm, setSubmitting }) => (\n <CardLayout\n actionBlock={\n <div className=\"flex flex-wrap items-center gap-2\">\n <FormikButton\n data-cy=\"ip-restriction-save-changes\"\n data-testid=\"save-changes-button\"\n loading={isUpdating}\n type=\"submit\"\n >\n {t(\"neetoMolecules.common.actions.saveChanges\")}\n </FormikButton>\n <Button\n data-cy=\"ip-restriction-reset-btn\"\n disabled={!dirty}\n label={t(\"neetoMolecules.common.actions.reset\")}\n style=\"secondary\"\n type=\"reset\"\n onClick={resetForm}\n />\n {dirty && (\n <Typography className=\"neeto-ui-text-error-500\" style=\"body2\">\n {t(\"neetoMolecules.ipRestriction.validations.unsavedChanges\")}\n </Typography>\n )}\n </div>\n }\n >\n <BlockNavigation />\n <div\n className={classnames(\"flex flex-col gap-y-2\", {\n \"pb-6\": values.ipRestriction,\n })}\n >\n <Switch\n checked={values.ipRestriction}\n className=\"flex-grow-0\"\n data-cy=\"enable-ip-restriction-switch\"\n disabled={isFetchingIpRestriction || isUpdating}\n id=\"ipRestriction\"\n name=\"ipRestriction\"\n label={\n <Typography style=\"h3\">\n {t(\"neetoMolecules.ipRestriction.switchLabel\")}\n </Typography>\n }\n onChange={() =>\n setFieldValue(\"ipRestriction\", !values.ipRestriction)\n }\n />\n <Typography data-cy=\"ip-restriction-description\" style=\"body2\">\n {t(\"neetoMolecules.ipRestriction.description\")}\n </Typography>\n </div>\n {values.ipRestriction && (\n <div className=\"neeto-ui-border-gray-300 flex w-full flex-col gap-y-6 border-t pt-6\">\n <CurrentIp />\n <AllowedIpRanges />\n <Callout style=\"warning\">\n <div className=\"block whitespace-pre-wrap py-1\">\n <Trans i18nKey=\"neetoMolecules.ipRestriction.warningMessage\" />\n </div>\n </Callout>\n </div>\n )}\n <Alert\n isOpen={isAlertOpen}\n isSubmitting={isUpdating}\n title={t(\"neetoMolecules.ipRestriction.enableAlert.title\")}\n message={\n <Trans i18nKey=\"neetoMolecules.ipRestriction.enableAlert.message\" />\n }\n submitButtonLabel={t(\n \"neetoMolecules.ipRestriction.enableAlert.submitButtonLabel\"\n )}\n onClose={() => handleCloseAlert(setSubmitting)}\n onSubmit={() =>\n handleUpdateIpRestriction(values, { setSubmitting, resetForm })\n }\n />\n </CardLayout>\n )}\n </NeetoUIForm>\n );\n};\n\nexport default memo(IpRestriction);\n"],"names":["require$$0","require$$1","Validator_1","require$$2","Validator","Hexadecatet_1","Octet_1","BinaryUtils_1","require$$3","HexadecimalUtils_1","require$$4","require$$5","IPNumber_1","Prefix_1","this","require$$6","require$$7","require$$8","require$$9","require$$10","toLabelAndValue","value","label","humanizeIpAddressFormat","isValidIPv4String","ip","isNotNil","isValidIPv6String","isValidIpString","areIpAddressesInSameFormat","ipStart","ipEnd","isValidIPv4Range","ipStartAddr","IPv4","fromDecimalDottedString","ipEndAddr","isLessThanOrEquals","isValidIPv6Range","IPv6","fromString","isValidIPRange","yup","addMethod","string","errorMessage","test","isNil","isValidIp","createError","path","message","getIpRestrictionValidationSchema","object","shape","validIp","t","required","when","schema","addressType","nullable","addressFormat","addressFormats","ipv4","ipv6","buildInitialValue","isIpRestrictionEnabled","allowedIpRanges","ipRestriction","buildAllowedIpRangesFormData","map","allowedIpRange","assoc","buildIpRestrictionPayload","values","allowedIpRangesWithTransformedAddressType","IP_RESTRICTIONS_ENGINE_BASE_URL","QUERY_KEYS","IP_RESTRICTION","ALLOWED_IP_RANGES","CURRENT_IP","ADDRESS_TYPE_SELECT_OPTIONS","VALIDATION_SCHEMA","array","of","NEW_ALLOWED_IP_RANGE","createdAt","Date","toISOString","AllowedIpRange","withT","_ref","index","arrayHelpers","_jsxs","className","children","_jsx","Input","labelProps","name","concat","placeholder","Select","options","Button","icon","Delete","style","tooltipProps","content","position","touch","onClick","remove","AllowedIpRanges","Typography","FieldArray","_Fragment","form","_createElement","key","Plus","iconPosition","push","memo","show","params","axios","get","currentIpApi","useShowCurrentIp","useQuery","queryKey","queryFn","CurrentIp","_useShowCurrentIp","data","isLoading","Trans","i18nKey","allowedIpRangesUrl","fetch","create","payload","post","destroy","id","update","patch","allowedIpRangesApi","useFetchAllowedIpRanges","_objectSpread","ipRestrictionUrl","ipRestrictionApi","useShowIpRestriction","useUpdateIpRestriction","useMutationWithInvalidation","keysToInvalidate","IpRestriction","_useTranslation","useTranslation","_useState","useState","_useState2","_slicedToArray","isAlertOpen","setIsAlertOpen","_useShowIpRestriction","_useShowIpRestriction2","_useShowIpRestriction3","isFetchingIpRestriction","_useFetchAllowedIpRan","enabled","isFetchingAllowedIpRanges","isRefetching","_useUpdateIpRestricti","updateIpRestriction","mutate","isUpdating","isPending","Spinner","handleSubmit","formikBag","handleUpdateIpRestriction","handleCloseAlert","setSubmitting","resetForm","onSuccess","onError","NeetoUIForm","formikProps","initialValues","validationSchema","validateOnBlur","enableReinitialize","onSubmit","_ref2","dirty","setFieldValue","CardLayout","actionBlock","FormikButton","loading","type","disabled","BlockNavigation","classnames","Switch","checked","onChange","Callout","Alert","isOpen","isSubmitting","title","submitButtonLabel","onClose"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}
|