@push.rocks/smartnetwork 4.8.0 → 4.10.0
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_rust/rustnetwork_linux_amd64 +0 -0
- package/dist_rust/rustnetwork_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/helpers/ip.d.ts +21 -0
- package/dist_ts/helpers/ip.js +80 -1
- package/dist_ts/index.d.ts +1 -1
- package/dist_ts/index.js +2 -2
- package/dist_ts/smartnetwork.classes.domainintelligence.d.ts +13 -58
- package/dist_ts/smartnetwork.classes.domainintelligence.js +45 -319
- package/dist_ts/smartnetwork.classes.ipintelligence.d.ts +3 -34
- package/dist_ts/smartnetwork.classes.ipintelligence.js +18 -281
- package/dist_ts/smartnetwork.plugins.d.ts +2 -1
- package/dist_ts/smartnetwork.plugins.js +3 -2
- package/package.json +5 -4
- package/readme.md +3 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/helpers/ip.ts +79 -0
- package/ts/index.ts +1 -1
- package/ts/smartnetwork.classes.domainintelligence.ts +48 -341
- package/ts/smartnetwork.classes.ipintelligence.ts +19 -310
- package/ts/smartnetwork.plugins.ts +2 -1
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartnetwork',
|
|
6
|
-
version: '4.
|
|
6
|
+
version: '4.10.0',
|
|
7
7
|
description: 'A toolkit for network diagnostics including speed tests, port availability checks, and more.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDhGQUE4RjtDQUM1RyxDQUFBIn0=
|
package/dist_ts/helpers/ip.d.ts
CHANGED
|
@@ -19,3 +19,24 @@ export declare function isValidIpv6(ip: string): boolean;
|
|
|
19
19
|
* Behaves like node:net.isIP() except that zone-indexed IPv6 is rejected.
|
|
20
20
|
*/
|
|
21
21
|
export declare function getIpVersion(ip: string): 4 | 6 | 0;
|
|
22
|
+
/**
|
|
23
|
+
* Expands a valid IPv6 address into its eight zero-padded 16-bit groups.
|
|
24
|
+
* Embedded IPv4 tails are converted to their two hex groups.
|
|
25
|
+
* Returns undefined for anything that is not a valid IPv6 address.
|
|
26
|
+
*/
|
|
27
|
+
export declare function expandIpv6(ip: string): string[] | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the reverse-DNS (PTR) name for a valid IPv4 or IPv6 address:
|
|
30
|
+
* 'in-addr.arpa' for IPv4, 'ip6.arpa' with nibble ordering for IPv6.
|
|
31
|
+
* Returns undefined instead of throwing for invalid input, so lookup code
|
|
32
|
+
* can treat "no address" and "bad address" uniformly.
|
|
33
|
+
*/
|
|
34
|
+
export declare function toReverseDnsName(ip: string): string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Returns true when the address is publicly routable: not private (RFC 1918),
|
|
37
|
+
* loopback, link-local, carrier-grade NAT, documentation, benchmarking,
|
|
38
|
+
* multicast, or otherwise reserved space. Invalid input returns false.
|
|
39
|
+
* IPv6 is public when it falls in global unicast 2000::/3 and is not the
|
|
40
|
+
* 2001:db8::/32 documentation range.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isPublicIpAddress(ip: string): boolean;
|
package/dist_ts/helpers/ip.js
CHANGED
|
@@ -68,4 +68,83 @@ export function getIpVersion(ip) {
|
|
|
68
68
|
return 6;
|
|
69
69
|
return 0;
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Expands a valid IPv6 address into its eight zero-padded 16-bit groups.
|
|
73
|
+
* Embedded IPv4 tails are converted to their two hex groups.
|
|
74
|
+
* Returns undefined for anything that is not a valid IPv6 address.
|
|
75
|
+
*/
|
|
76
|
+
export function expandIpv6(ip) {
|
|
77
|
+
if (!isValidIpv6(ip))
|
|
78
|
+
return undefined;
|
|
79
|
+
let normalized = ip;
|
|
80
|
+
const lastColon = normalized.lastIndexOf(':');
|
|
81
|
+
const tail = normalized.slice(lastColon + 1);
|
|
82
|
+
if (tail.includes('.')) {
|
|
83
|
+
const octets = tail.split('.').map(Number);
|
|
84
|
+
const hexTail = `${((octets[0] << 8) | octets[1]).toString(16)}:${((octets[2] << 8) | octets[3]).toString(16)}`;
|
|
85
|
+
normalized = `${normalized.slice(0, lastColon + 1)}${hexTail}`;
|
|
86
|
+
}
|
|
87
|
+
const halves = normalized.split('::');
|
|
88
|
+
const parseGroups = (segment) => segment === '' ? [] : segment.split(':');
|
|
89
|
+
const left = parseGroups(halves[0]);
|
|
90
|
+
const right = halves.length === 2 ? parseGroups(halves[1]) : [];
|
|
91
|
+
const missing = 8 - left.length - right.length;
|
|
92
|
+
if ((halves.length === 1 && missing !== 0) || missing < 0)
|
|
93
|
+
return undefined;
|
|
94
|
+
const groups = [...left, ...Array.from({ length: missing }, () => '0'), ...right];
|
|
95
|
+
if (groups.length !== 8)
|
|
96
|
+
return undefined;
|
|
97
|
+
return groups.map((group) => group.toLowerCase().padStart(4, '0'));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns the reverse-DNS (PTR) name for a valid IPv4 or IPv6 address:
|
|
101
|
+
* 'in-addr.arpa' for IPv4, 'ip6.arpa' with nibble ordering for IPv6.
|
|
102
|
+
* Returns undefined instead of throwing for invalid input, so lookup code
|
|
103
|
+
* can treat "no address" and "bad address" uniformly.
|
|
104
|
+
*/
|
|
105
|
+
export function toReverseDnsName(ip) {
|
|
106
|
+
const family = getIpVersion(ip);
|
|
107
|
+
if (family === 4) {
|
|
108
|
+
return `${ip.split('.').reverse().join('.')}.in-addr.arpa`;
|
|
109
|
+
}
|
|
110
|
+
if (family === 6) {
|
|
111
|
+
const groups = expandIpv6(ip);
|
|
112
|
+
if (!groups)
|
|
113
|
+
return undefined;
|
|
114
|
+
return `${groups.join('').split('').reverse().join('.')}.ip6.arpa`;
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Returns true when the address is publicly routable: not private (RFC 1918),
|
|
120
|
+
* loopback, link-local, carrier-grade NAT, documentation, benchmarking,
|
|
121
|
+
* multicast, or otherwise reserved space. Invalid input returns false.
|
|
122
|
+
* IPv6 is public when it falls in global unicast 2000::/3 and is not the
|
|
123
|
+
* 2001:db8::/32 documentation range.
|
|
124
|
+
*/
|
|
125
|
+
export function isPublicIpAddress(ip) {
|
|
126
|
+
const family = getIpVersion(ip);
|
|
127
|
+
if (family === 4) {
|
|
128
|
+
const [a, b, c] = ip.split('.').map(Number);
|
|
129
|
+
return !(a === 0 || a === 10 || a === 127 || a >= 224
|
|
130
|
+
|| (a === 100 && b >= 64 && b <= 127)
|
|
131
|
+
|| (a === 169 && b === 254)
|
|
132
|
+
|| (a === 172 && b >= 16 && b <= 31)
|
|
133
|
+
|| (a === 192 && b === 0)
|
|
134
|
+
|| (a === 192 && b === 168)
|
|
135
|
+
|| (a === 198 && (b === 18 || b === 19))
|
|
136
|
+
|| (a === 198 && b === 51 && c === 100)
|
|
137
|
+
|| (a === 203 && b === 0 && c === 113));
|
|
138
|
+
}
|
|
139
|
+
if (family === 6) {
|
|
140
|
+
const groups = expandIpv6(ip);
|
|
141
|
+
if (!groups)
|
|
142
|
+
return false;
|
|
143
|
+
const firstGroup = parseInt(groups[0], 16);
|
|
144
|
+
if (firstGroup < 0x2000 || firstGroup > 0x3fff)
|
|
145
|
+
return false;
|
|
146
|
+
return !(groups[0] === '2001' && groups[1] === '0db8');
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oZWxwZXJzL2lwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBVTtJQUNwQyxJQUFJLENBQUMsRUFBRTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNyQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFVO0lBQ3BDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUUxQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFckQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFlLEVBQVksRUFBRSxDQUNoRCxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFFLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDNUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFdkQsc0VBQXNFO0lBQ3RFLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsSUFBSSxTQUFTLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFDLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDaEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU3RSxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLCtDQUErQztRQUMvQyxPQUFPLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELE9BQU8sVUFBVSxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxFQUFVO0lBQ3JDLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEVBQVU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUV2QyxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDcEIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDaEgsVUFBVSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBZSxFQUFZLEVBQUUsQ0FDaEQsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDNUUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNsRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBVTtJQUN6QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDN0QsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzlCLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUFVO0lBQzFDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRztlQUNoRCxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO2VBQ2xDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO2VBQ3hCLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7ZUFDakMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7ZUFDdEIsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7ZUFDeEIsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7ZUFDckMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztlQUNwQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxHQUFHLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM3RCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -8,4 +8,4 @@ export { DomainIntelligence } from './smartnetwork.classes.domainintelligence.js
|
|
|
8
8
|
export type { IDomainIntelligenceResult, IDomainIntelligenceOptions } from './smartnetwork.classes.domainintelligence.js';
|
|
9
9
|
export { setLogger, getLogger } from './logging.js';
|
|
10
10
|
export { NetworkError, TimeoutError } from './errors.js';
|
|
11
|
-
export { isValidIpv4, isValidIpv6, getIpVersion } from './helpers/ip.js';
|
|
11
|
+
export { isValidIpv4, isValidIpv6, getIpVersion, expandIpv6, toReverseDnsName, isPublicIpAddress } from './helpers/ip.js';
|
package/dist_ts/index.js
CHANGED
|
@@ -5,5 +5,5 @@ export { IpIntelligence } from './smartnetwork.classes.ipintelligence.js';
|
|
|
5
5
|
export { DomainIntelligence } from './smartnetwork.classes.domainintelligence.js';
|
|
6
6
|
export { setLogger, getLogger } from './logging.js';
|
|
7
7
|
export { NetworkError, TimeoutError } from './errors.js';
|
|
8
|
-
export { isValidIpv4, isValidIpv6, getIpVersion } from './helpers/ip.js';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
export { isValidIpv4, isValidIpv6, getIpVersion, expandIpv6, toReverseDnsName, isPublicIpAddress } from './helpers/ip.js';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDIn0=
|
|
@@ -53,14 +53,14 @@ export interface IDomainIntelligenceOptions {
|
|
|
53
53
|
dnsClient?: TSmartdnsClient;
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
* DomainIntelligence performs RDAP lookups for domain names
|
|
57
|
-
*
|
|
56
|
+
* DomainIntelligence performs RDAP lookups for domain names via
|
|
57
|
+
* @push.rocks/smartwhois, which resolves the correct registry RDAP endpoint
|
|
58
|
+
* per TLD through the IANA DNS bootstrap.
|
|
58
59
|
*/
|
|
59
60
|
export declare class DomainIntelligence {
|
|
60
61
|
private readonly logger;
|
|
61
62
|
private readonly timeout;
|
|
62
|
-
private
|
|
63
|
-
private bootstrapPromise;
|
|
63
|
+
private readonly rdapClient;
|
|
64
64
|
private readonly sharedDnsClient;
|
|
65
65
|
constructor(options?: IDomainIntelligenceOptions);
|
|
66
66
|
/**
|
|
@@ -75,51 +75,22 @@ export declare class DomainIntelligence {
|
|
|
75
75
|
*/
|
|
76
76
|
getIntelligence(domain: string): Promise<IDomainIntelligenceResult>;
|
|
77
77
|
/**
|
|
78
|
-
* Run the full RDAP lookup flow for a pre-normalized domain
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
78
|
+
* Run the full RDAP lookup flow for a pre-normalized domain via the
|
|
79
|
+
* smartwhois RdapClient. Returns the parsed RDAP fields (as a full
|
|
80
|
+
* IDomainIntelligenceResult) or null if any step fails, the TLD has no
|
|
81
|
+
* RDAP support, or the registry reports the domain as not registered.
|
|
82
82
|
*/
|
|
83
83
|
private queryRdapLayer;
|
|
84
|
+
/**
|
|
85
|
+
* Map a smartwhois RDAP domain record onto the IDomainIntelligenceResult
|
|
86
|
+
* shape (RDAP fields only; DNS enrichment fields stay null here).
|
|
87
|
+
*/
|
|
88
|
+
private mapRdapRecord;
|
|
84
89
|
/**
|
|
85
90
|
* Normalize a domain to lowercased ASCII punycode form. Returns null for
|
|
86
91
|
* obviously invalid input.
|
|
87
92
|
*/
|
|
88
93
|
private normalizeDomain;
|
|
89
|
-
/**
|
|
90
|
-
* Extract the TLD as the last dot-separated label.
|
|
91
|
-
*/
|
|
92
|
-
private extractTld;
|
|
93
|
-
/**
|
|
94
|
-
* Load and cache the IANA DNS bootstrap file.
|
|
95
|
-
*/
|
|
96
|
-
private ensureBootstrap;
|
|
97
|
-
/**
|
|
98
|
-
* Find the RDAP base URL for a given TLD via direct lookup.
|
|
99
|
-
*/
|
|
100
|
-
private matchTld;
|
|
101
|
-
/**
|
|
102
|
-
* Perform the RDAP HTTP query for a domain.
|
|
103
|
-
*/
|
|
104
|
-
private queryRdap;
|
|
105
|
-
private parseRdapResponse;
|
|
106
|
-
/**
|
|
107
|
-
* Pull registration / expiration / last changed timestamps from an
|
|
108
|
-
* RDAP `events` array.
|
|
109
|
-
*/
|
|
110
|
-
private extractEvents;
|
|
111
|
-
/**
|
|
112
|
-
* Extract registrar identity (name, IANA ID) and a nested abuse contact.
|
|
113
|
-
*/
|
|
114
|
-
private extractRegistrar;
|
|
115
|
-
/**
|
|
116
|
-
* Extract registrant org/country from entities array.
|
|
117
|
-
*/
|
|
118
|
-
private extractRegistrant;
|
|
119
|
-
/**
|
|
120
|
-
* Map an RDAP nameservers[] array to a list of lowercased ldhName strings.
|
|
121
|
-
*/
|
|
122
|
-
private extractNameservers;
|
|
123
94
|
/**
|
|
124
95
|
* Run DNS record lookups for the given domain using smartdns. Queries
|
|
125
96
|
* NS/A/AAAA/MX/TXT/SOA in parallel via Promise.allSettled — failures in
|
|
@@ -150,21 +121,5 @@ export declare class DomainIntelligence {
|
|
|
150
121
|
* value as the exchange with priority=null so the result is still useful.
|
|
151
122
|
*/
|
|
152
123
|
private parseMxRecords;
|
|
153
|
-
/**
|
|
154
|
-
* Extract the 'fn' (formatted name) from an entity's vcardArray
|
|
155
|
-
*/
|
|
156
|
-
private extractVcardFn;
|
|
157
|
-
/**
|
|
158
|
-
* Extract email from an entity's vcardArray
|
|
159
|
-
*/
|
|
160
|
-
private extractVcardEmail;
|
|
161
|
-
/**
|
|
162
|
-
* Extract telephone number from an entity's vcardArray
|
|
163
|
-
*/
|
|
164
|
-
private extractVcardTel;
|
|
165
|
-
/**
|
|
166
|
-
* Extract country from an entity's vcardArray address field
|
|
167
|
-
*/
|
|
168
|
-
private extractVcardCountry;
|
|
169
124
|
}
|
|
170
125
|
export {};
|