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
JavaScript
;
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;