UNPKG

ddd-tool-kit

Version:

A development tool kit for using Domain Driven Design in your Web API Node.js

72 lines (71 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IpValueObject = void 0; const node_net_1 = require("node:net"); const value_object_abstract_1 = require("../../../abstract/value-object/value-object.abstract"); const ip_scoop_enum_1 = require("../../../utils/enums/ip-scoop.enum"); const ip_errors_1 = require("./ip.errors"); const ip_version_enum_1 = require("../../../utils/enums/ip-version.enum"); const output_util_1 = require("../../../utils/output/output.util"); class IpValueObject extends value_object_abstract_1.ValueObject { get version() { return (0, node_net_1.isIP)(this.value); } get scoop() { let isPrivateIp; if (this.isIPv4) { const ipParts = this.value.split('.').map(Number); const ipNumber = ((ipParts[0] << 24) | (ipParts[1] << 16) | (ipParts[2] << 8) | ipParts[3]) >>> 0; const privateIPRanges = [ { start: 167772160, end: 184549375 }, { start: 2886729728, end: 2887778303 }, { start: 3232235520, end: 3232301055 }, ]; isPrivateIp = privateIPRanges.some((range) => ipNumber >= range.start && ipNumber <= range.end); } else { const normalizedIP = this.value.toLowerCase(); const privateIPPrefixes = [ '::1', 'fc00::', 'fd00::', 'fe80::', 'fec0::', '2001:db8::', ]; isPrivateIp = privateIPPrefixes.some((prefix) => normalizedIP.startsWith(prefix)); } return isPrivateIp ? ip_scoop_enum_1.IP_SCOOP.PRIVATE : ip_scoop_enum_1.IP_SCOOP.PUBLIC; } get isPublicIP() { return this.scoop === ip_scoop_enum_1.IP_SCOOP.PUBLIC; } get isPrivateIP() { return this.scoop === ip_scoop_enum_1.IP_SCOOP.PRIVATE; } get isIPv4() { return this.version === ip_version_enum_1.IP_VERSION.V4; } get isIPv6() { return this.version === ip_version_enum_1.IP_VERSION.V6; } sanitizeProps() { this.props.value.trim(); } isValidProps() { return this.version !== ip_version_enum_1.IP_VERSION.NONE; } static init(props) { const ip = new IpValueObject(props); const isInvalidProps = !ip.isValidProps(); if (isInvalidProps) { return output_util_1.Output.fail(ip_errors_1.INVALID_IP); } return output_util_1.Output.success(ip); } } exports.IpValueObject = IpValueObject;