@terascope/ip-utils 2.0.0-dev.10
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/README.md +17 -0
- package/dist/src/index.d.ts +70 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +312 -0
- package/dist/src/index.js.map +1 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- THIS FILE IS AUTO-GENERATED, EDIT docs/packages/ip-utils/overview.md -->
|
|
2
|
+
|
|
3
|
+
# IP Utils
|
|
4
|
+
|
|
5
|
+
> A collection of Teraslice IP Utilities
|
|
6
|
+
|
|
7
|
+
This is a package within the [Teraslice](https://github.com/terascope/teraslice) monorepo. See our [documentation](https://terascope.github.io/teraslice/docs/packages/ip-utils/overview) for more information or the [issues](https://github.com/terascope/teraslice/issues?q=is%3Aopen+is%3Aissue+label%3Apkg%2Fip-utils) associated with this package
|
|
8
|
+
|
|
9
|
+
## Contributing
|
|
10
|
+
|
|
11
|
+
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
|
|
12
|
+
|
|
13
|
+
Please make sure to update tests as appropriate.
|
|
14
|
+
|
|
15
|
+
## License
|
|
16
|
+
|
|
17
|
+
[MIT](./LICENSE) licensed.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export declare function isIP(input: unknown): input is string;
|
|
2
|
+
/** Will throw if input is not a valid CIDR */
|
|
3
|
+
export declare function isIPRangeOrThrow(input: unknown): string;
|
|
4
|
+
/** Will throw if input is not a valid IP */
|
|
5
|
+
export declare function isIPOrThrow(input: unknown): string;
|
|
6
|
+
export declare function isIPv6(input: unknown): boolean;
|
|
7
|
+
export declare function isIPv4(input: unknown): boolean;
|
|
8
|
+
export declare function isMappedIPv4(input: unknown): boolean;
|
|
9
|
+
export declare function extractMappedIPv4(input: unknown): string;
|
|
10
|
+
export declare function inIPRange(input: unknown, args: {
|
|
11
|
+
min?: string;
|
|
12
|
+
max?: string;
|
|
13
|
+
cidr?: string;
|
|
14
|
+
}): boolean;
|
|
15
|
+
export declare function isRoutableIP(input: unknown): boolean;
|
|
16
|
+
export declare function isNonRoutableIP(input: unknown): boolean;
|
|
17
|
+
export declare function isCIDR(input: unknown): input is string;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param input ip address block in CIDR notation
|
|
21
|
+
* @returns first IP address in the block
|
|
22
|
+
* @deprecated use getFirstUsableIPInCIDR
|
|
23
|
+
*/
|
|
24
|
+
export declare function getCIDRMin(input: unknown): string;
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param input ip address block in CIDR notation
|
|
28
|
+
* @returns last ip address in the block
|
|
29
|
+
* @deprecated use getLastUsableIPInCIDR
|
|
30
|
+
*/
|
|
31
|
+
export declare function getCIDRMax(input: unknown): string;
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @param input ip address block in CIDR notation, inclusive
|
|
35
|
+
* @returns first IP address in the block
|
|
36
|
+
*/
|
|
37
|
+
export declare function getFirstIPInCIDR(input: unknown): string;
|
|
38
|
+
/**
|
|
39
|
+
*
|
|
40
|
+
* @param input ip address block in CIDR notation
|
|
41
|
+
* @returns last ip address in the block, inclusive
|
|
42
|
+
*/
|
|
43
|
+
export declare function getLastIPInCIDR(input: unknown): string;
|
|
44
|
+
/**
|
|
45
|
+
*
|
|
46
|
+
* @param input ip address block in CIDR notation
|
|
47
|
+
* @returns first usable ip address of the CIDR block
|
|
48
|
+
*/
|
|
49
|
+
export declare function getFirstUsableIPInCIDR(input: unknown): string;
|
|
50
|
+
/**
|
|
51
|
+
*
|
|
52
|
+
* @param input ip address block in CIDR notation
|
|
53
|
+
* @returns last usable ip address of the CIDR block
|
|
54
|
+
*/
|
|
55
|
+
export declare function getLastUsableIPInCIDR(input: unknown): string;
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* @param input ip address
|
|
59
|
+
* @returns IPv6 addresses are returned without leading 0's in a group or empty groups
|
|
60
|
+
* ipv4 addresses are simply returned
|
|
61
|
+
*/
|
|
62
|
+
export declare function shortenIPv6Address(input: unknown): string;
|
|
63
|
+
export declare function getCIDRBroadcast(input: unknown): string;
|
|
64
|
+
export declare function getCIDRNetwork(input: unknown): string;
|
|
65
|
+
export declare function toCIDR(input: unknown, suffix: string | number): string;
|
|
66
|
+
export declare function isNonZeroCidr(input: string): boolean;
|
|
67
|
+
export declare function ipToInt(input: unknown): bigint;
|
|
68
|
+
export declare function intToIP(input: unknown, ipVersion: string | number): string;
|
|
69
|
+
export declare function reverseIP(input: unknown): string;
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAcA,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMvD;AAED,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMlD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE9C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQpD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUxD;AAED,wBAAgB,SAAS,CACrB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAcT;AAwBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIvD;AAuDD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMtD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,UAOpD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,UAOnD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,UAMhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYrD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAMtE;AAuBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIpD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM9C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAmB1E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUhD"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { toInteger, isNumberLike, toBigIntOrThrow, isNumber, isString, getTypeOf, isBoolean } from '@terascope/core-utils';
|
|
2
|
+
import { isIP as _isIP, isIPv4 as _isIPv4, isIPv6 as _isIPv6, ipVersion as _ipVersion } from '@chainsafe/is-ip';
|
|
3
|
+
import IPCIDR from 'ip-cidr';
|
|
4
|
+
import isCidr from 'is-cidr';
|
|
5
|
+
import ipaddr from 'ipaddr.js';
|
|
6
|
+
import { parseIp, stringifyIp } from 'ip-bigint';
|
|
7
|
+
import ip6addr from 'ip6addr';
|
|
8
|
+
export function isIP(input) {
|
|
9
|
+
return isString(input) && _isIP(input);
|
|
10
|
+
}
|
|
11
|
+
/** Will throw if input is not a valid CIDR */
|
|
12
|
+
export function isIPRangeOrThrow(input) {
|
|
13
|
+
if (!isCIDR(input)) {
|
|
14
|
+
throw new TypeError(`Expected ${input} (${getTypeOf(input)}) to be a valid IP range`);
|
|
15
|
+
}
|
|
16
|
+
return input;
|
|
17
|
+
}
|
|
18
|
+
/** Will throw if input is not a valid IP */
|
|
19
|
+
export function isIPOrThrow(input) {
|
|
20
|
+
if (!isString(input) || !isIP(input)) {
|
|
21
|
+
throw new TypeError(`Expected ${input} (${getTypeOf(input)}) to be a valid IP`);
|
|
22
|
+
}
|
|
23
|
+
return input;
|
|
24
|
+
}
|
|
25
|
+
export function isIPv6(input) {
|
|
26
|
+
return isString(input) && _isIPv6(input);
|
|
27
|
+
}
|
|
28
|
+
export function isIPv4(input) {
|
|
29
|
+
return isString(input) && _isIPv4(input);
|
|
30
|
+
}
|
|
31
|
+
export function isMappedIPv4(input) {
|
|
32
|
+
if (isIPv6(input)) {
|
|
33
|
+
const parsed = ipaddr.parse(input);
|
|
34
|
+
return parsed.isIPv4MappedAddress();
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
export function extractMappedIPv4(input) {
|
|
39
|
+
if (isIPv6(input) && isMappedIPv4(input)) {
|
|
40
|
+
const parsed = ipaddr.parse(input);
|
|
41
|
+
const ipv4 = parsed.toIPv4Address();
|
|
42
|
+
return ipv4.octets.join('.');
|
|
43
|
+
}
|
|
44
|
+
throw Error('input must be an IPv4 address mapped to an IPv6 address');
|
|
45
|
+
}
|
|
46
|
+
export function inIPRange(input, args) {
|
|
47
|
+
if (!isIP(input))
|
|
48
|
+
return false;
|
|
49
|
+
if (args.cidr != null) {
|
|
50
|
+
return isCIDR(args.cidr) && ip6addr.createCIDR(args.cidr).contains(input);
|
|
51
|
+
}
|
|
52
|
+
const ipType = _ipVersion(input);
|
|
53
|
+
const min = args.min || _assignMin(ipType);
|
|
54
|
+
const max = args.max || _assignMax(ipType);
|
|
55
|
+
return _validMinAndMax(min, max)
|
|
56
|
+
&& ip6addr.createAddrRange(min, max).contains(input);
|
|
57
|
+
}
|
|
58
|
+
function _assignMin(ipType, min) {
|
|
59
|
+
if (min)
|
|
60
|
+
return min;
|
|
61
|
+
if (ipType === 4)
|
|
62
|
+
return '0.0.0.0';
|
|
63
|
+
return '::';
|
|
64
|
+
}
|
|
65
|
+
function _assignMax(ipType, max) {
|
|
66
|
+
if (max)
|
|
67
|
+
return max;
|
|
68
|
+
if (ipType === 4)
|
|
69
|
+
return '255.255.255.255';
|
|
70
|
+
return 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff';
|
|
71
|
+
}
|
|
72
|
+
function _validMinAndMax(min, max) {
|
|
73
|
+
return isIP(min) && isIP(max)
|
|
74
|
+
&& _ipVersion(min) === _ipVersion(max)
|
|
75
|
+
&& ip6addr.compare(min, max) === -1;
|
|
76
|
+
}
|
|
77
|
+
export function isRoutableIP(input) {
|
|
78
|
+
if (!isIP(input))
|
|
79
|
+
return false;
|
|
80
|
+
return !_isPrivateIP(input);
|
|
81
|
+
}
|
|
82
|
+
export function isNonRoutableIP(input) {
|
|
83
|
+
if (!isIP(input))
|
|
84
|
+
return false;
|
|
85
|
+
return _isPrivateIP(input);
|
|
86
|
+
}
|
|
87
|
+
function _isPrivateIP(input) {
|
|
88
|
+
const parsedIp = _parseIpAddress(input);
|
|
89
|
+
return _inPrivateIPRange(parsedIp.range()) || _inRestrictedIPRange(parsedIp);
|
|
90
|
+
}
|
|
91
|
+
function _parseIpAddress(input) {
|
|
92
|
+
if (isMappedIPv4(input)) {
|
|
93
|
+
return ipaddr.parse(extractMappedIPv4(input));
|
|
94
|
+
}
|
|
95
|
+
return ipaddr.parse(input);
|
|
96
|
+
}
|
|
97
|
+
function _inPrivateIPRange(ipRange) {
|
|
98
|
+
return [
|
|
99
|
+
'private',
|
|
100
|
+
'uniqueLocal',
|
|
101
|
+
'loopback',
|
|
102
|
+
'unspecified',
|
|
103
|
+
'carrierGradeNat',
|
|
104
|
+
'linkLocal',
|
|
105
|
+
'reserved',
|
|
106
|
+
'rfc6052',
|
|
107
|
+
'teredo',
|
|
108
|
+
'6to4',
|
|
109
|
+
'broadcast'
|
|
110
|
+
].includes(ipRange);
|
|
111
|
+
}
|
|
112
|
+
// parse the ranges here
|
|
113
|
+
// to avoid having to parse every time the function is called
|
|
114
|
+
const ipv4RestrictedRanges = [
|
|
115
|
+
ipaddr.parseCIDR('192.31.196.0/24'),
|
|
116
|
+
ipaddr.parseCIDR('192.52.193.0/24'),
|
|
117
|
+
ipaddr.parseCIDR('192.175.48.0/24'),
|
|
118
|
+
ipaddr.parseCIDR('198.18.0.0/15'),
|
|
119
|
+
ipaddr.parseCIDR('224.0.0.0/8')
|
|
120
|
+
];
|
|
121
|
+
const ipv6RestrictedRanges = [
|
|
122
|
+
ipaddr.parseCIDR('64:ff9b:1::/48'),
|
|
123
|
+
ipaddr.parseCIDR('100::/64'),
|
|
124
|
+
ipaddr.parseCIDR('2001::/23'),
|
|
125
|
+
ipaddr.parseCIDR('2620:4f:8000::/48')
|
|
126
|
+
];
|
|
127
|
+
function _inRestrictedIPRange(parsedIp) {
|
|
128
|
+
const rangesToCheck = parsedIp.kind() === 'ipv4' ? ipv4RestrictedRanges : ipv6RestrictedRanges;
|
|
129
|
+
return rangesToCheck.some((ipRange) => parsedIp.match(ipRange));
|
|
130
|
+
}
|
|
131
|
+
export function isCIDR(input) {
|
|
132
|
+
return isString(input) && IPCIDR.isValidCIDR(input);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
*
|
|
136
|
+
* @param input ip address block in CIDR notation
|
|
137
|
+
* @returns first IP address in the block
|
|
138
|
+
* @deprecated use getFirstUsableIPInCIDR
|
|
139
|
+
*/
|
|
140
|
+
export function getCIDRMin(input) {
|
|
141
|
+
return getFirstUsableIPInCIDR(input);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
*
|
|
145
|
+
* @param input ip address block in CIDR notation
|
|
146
|
+
* @returns last ip address in the block
|
|
147
|
+
* @deprecated use getLastUsableIPInCIDR
|
|
148
|
+
*/
|
|
149
|
+
export function getCIDRMax(input) {
|
|
150
|
+
return getLastUsableIPInCIDR(input);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
*
|
|
154
|
+
* @param input ip address block in CIDR notation, inclusive
|
|
155
|
+
* @returns first IP address in the block
|
|
156
|
+
*/
|
|
157
|
+
export function getFirstIPInCIDR(input) {
|
|
158
|
+
if (isCIDR(input)) {
|
|
159
|
+
return shortenIPv6Address(new IPCIDR(input).start());
|
|
160
|
+
}
|
|
161
|
+
throw Error('input must be a valid IP address in CIDR notation');
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
*
|
|
165
|
+
* @param input ip address block in CIDR notation
|
|
166
|
+
* @returns last ip address in the block, inclusive
|
|
167
|
+
*/
|
|
168
|
+
export function getLastIPInCIDR(input) {
|
|
169
|
+
if (isCIDR(input)) {
|
|
170
|
+
return shortenIPv6Address(new IPCIDR(input).end());
|
|
171
|
+
}
|
|
172
|
+
throw Error('input must be a valid IP address in CIDR notation');
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
*
|
|
176
|
+
* @param input ip address block in CIDR notation
|
|
177
|
+
* @returns first usable ip address of the CIDR block
|
|
178
|
+
*/
|
|
179
|
+
export function getFirstUsableIPInCIDR(input) {
|
|
180
|
+
if (isCIDR(input)) {
|
|
181
|
+
return createCIDR(input).first()
|
|
182
|
+
.toString();
|
|
183
|
+
}
|
|
184
|
+
throw Error('input must be a valid IP address in CIDR notation');
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
*
|
|
188
|
+
* @param input ip address block in CIDR notation
|
|
189
|
+
* @returns last usable ip address of the CIDR block
|
|
190
|
+
*/
|
|
191
|
+
export function getLastUsableIPInCIDR(input) {
|
|
192
|
+
if (isCIDR(input)) {
|
|
193
|
+
return createCIDR(input).last()
|
|
194
|
+
.toString();
|
|
195
|
+
}
|
|
196
|
+
throw Error('input must be a valid IP address in CIDR notation');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
*
|
|
200
|
+
* @param input ip address
|
|
201
|
+
* @returns IPv6 addresses are returned without leading 0's in a group or empty groups
|
|
202
|
+
* ipv4 addresses are simply returned
|
|
203
|
+
*/
|
|
204
|
+
export function shortenIPv6Address(input) {
|
|
205
|
+
if (isIP(input)) {
|
|
206
|
+
return ip6addr.parse(input).toString();
|
|
207
|
+
}
|
|
208
|
+
throw Error('input must be a valid address');
|
|
209
|
+
}
|
|
210
|
+
export function getCIDRBroadcast(input) {
|
|
211
|
+
if (isCIDR(input)) {
|
|
212
|
+
const asCIDR = createCIDR(input);
|
|
213
|
+
if (isIPv4(asCIDR.address().toString())) {
|
|
214
|
+
return asCIDR.broadcast().toString();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
throw Error('input must be a valid IPv4 address in CIDR notation');
|
|
218
|
+
}
|
|
219
|
+
export function getCIDRNetwork(input) {
|
|
220
|
+
if (isCIDR(input)) {
|
|
221
|
+
const asCIDR = createCIDR(input);
|
|
222
|
+
const address = asCIDR.address().toString();
|
|
223
|
+
if (isIPv4(address)) {
|
|
224
|
+
return ipaddr.IPv4.networkAddressFromCIDR(input).octets.join('.');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
throw Error('input must be a valid IPv4 address in CIDR notation');
|
|
228
|
+
}
|
|
229
|
+
export function toCIDR(input, suffix) {
|
|
230
|
+
if (isIP(input) && _validSuffix(_ipVersion(input), suffix)) {
|
|
231
|
+
return createCIDR(input, toInteger(suffix)).toString();
|
|
232
|
+
}
|
|
233
|
+
throw Error('input must be a valid IP address and suffix must be a value <= 32 for IPv4 or <= 128 for IPv6');
|
|
234
|
+
}
|
|
235
|
+
function _validSuffix(ipVersion, suffix) {
|
|
236
|
+
if (isNumberLike(suffix)) {
|
|
237
|
+
const asInt = toInteger(suffix);
|
|
238
|
+
if (isBoolean(asInt))
|
|
239
|
+
return false;
|
|
240
|
+
if (asInt < 0)
|
|
241
|
+
return false;
|
|
242
|
+
if (ipVersion === 4)
|
|
243
|
+
return asInt <= 32;
|
|
244
|
+
if (ipVersion === 6)
|
|
245
|
+
return asInt <= 128;
|
|
246
|
+
}
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
function createCIDR(input, suffix) {
|
|
250
|
+
if (suffix != null) {
|
|
251
|
+
return ip6addr.createCIDR(input, suffix);
|
|
252
|
+
}
|
|
253
|
+
return ip6addr.createCIDR(input);
|
|
254
|
+
}
|
|
255
|
+
export function isNonZeroCidr(input) {
|
|
256
|
+
const cidrValue = isCidr(input);
|
|
257
|
+
if (isNumber(cidrValue) && cidrValue > 0)
|
|
258
|
+
return true;
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
export function ipToInt(input) {
|
|
262
|
+
if (isIP(input)) {
|
|
263
|
+
return toBigIntOrThrow(parseIp(input).number);
|
|
264
|
+
}
|
|
265
|
+
throw Error('input must be a valid ip address');
|
|
266
|
+
}
|
|
267
|
+
export function intToIP(input, ipVersion) {
|
|
268
|
+
const versionAsInt = toInteger(ipVersion);
|
|
269
|
+
if (isNumberLike(input) && (versionAsInt === 4 || versionAsInt === 6)) {
|
|
270
|
+
const bigInt = BigInt(input);
|
|
271
|
+
const maxIpV4 = 2n ** 32n - 1n;
|
|
272
|
+
const maxIpV6 = 2n ** 128n - 1n;
|
|
273
|
+
if (bigInt < 0n || bigInt > (versionAsInt === 4 ? maxIpV4 : maxIpV6)) {
|
|
274
|
+
throw new Error(`Invalid IP input: ${bigInt}`);
|
|
275
|
+
}
|
|
276
|
+
return stringifyIp({
|
|
277
|
+
number: bigInt,
|
|
278
|
+
version: versionAsInt,
|
|
279
|
+
ipv4mapped: false,
|
|
280
|
+
scopeid: undefined
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
throw Error('input should be a big int or string for large numbers. Version must be 4 or 6');
|
|
284
|
+
}
|
|
285
|
+
export function reverseIP(input) {
|
|
286
|
+
if (!isIP(input))
|
|
287
|
+
throw Error('input must be a valid ip address');
|
|
288
|
+
const parsedIp = ipaddr.parse(input);
|
|
289
|
+
if (parsedIp.kind() === 'ipv4') {
|
|
290
|
+
return parsedIp.octets.reverse().join('.');
|
|
291
|
+
}
|
|
292
|
+
return _reverseIPv6(parsedIp);
|
|
293
|
+
}
|
|
294
|
+
function _reverseIPv6(ip) {
|
|
295
|
+
return ip.toNormalizedString().split(':')
|
|
296
|
+
.reduce((parts, part) => {
|
|
297
|
+
parts.push(_expandIPv6Part(part));
|
|
298
|
+
return parts;
|
|
299
|
+
}, [])
|
|
300
|
+
.join('')
|
|
301
|
+
.split('')
|
|
302
|
+
.reverse()
|
|
303
|
+
.join('.');
|
|
304
|
+
}
|
|
305
|
+
function _expandIPv6Part(part) {
|
|
306
|
+
let expandedPart = part;
|
|
307
|
+
while (expandedPart.length < 4) {
|
|
308
|
+
expandedPart = `0${expandedPart}`;
|
|
309
|
+
}
|
|
310
|
+
return expandedPart;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@terascope/ip-utils",
|
|
3
|
+
"displayName": "IP Utils",
|
|
4
|
+
"version": "2.0.0-dev.10",
|
|
5
|
+
"description": "A collection of Teraslice IP Utilities",
|
|
6
|
+
"homepage": "https://github.com/terascope/teraslice/tree/master/packages/ip-utils#readme",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/terascope/teraslice/issues"
|
|
9
|
+
},
|
|
10
|
+
"repository": "git@github.com:terascope/teraslice.git",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"author": "Terascope, LLC <info@terascope.io>",
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "dist/src/index.js",
|
|
16
|
+
"typings": "dist/src/index.d.ts",
|
|
17
|
+
"files": [
|
|
18
|
+
"dist/src/**/*"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"benchmark": "yarn build && node bench/index.js",
|
|
22
|
+
"build": "tsc --build",
|
|
23
|
+
"build:watch": "yarn build --watch",
|
|
24
|
+
"test": "node ../scripts/bin/ts-scripts test ../ip-utils --",
|
|
25
|
+
"test:debug": "node ../scripts/bin/ts-scripts test --debug ../ip-utils --",
|
|
26
|
+
"test:watch": "node ../scripts/bin/ts-scripts test --watch ../ip-utils --"
|
|
27
|
+
},
|
|
28
|
+
"resolutions": {
|
|
29
|
+
"debug": "~4.4.3"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@chainsafe/is-ip": "~2.1.0",
|
|
33
|
+
"@terascope/core-utils": "~2.0.0-dev.10",
|
|
34
|
+
"@terascope/types": "~2.0.0-dev.8",
|
|
35
|
+
"ip-bigint": "~8.2.2",
|
|
36
|
+
"ip-cidr": "~4.0.2",
|
|
37
|
+
"ip6addr": "~0.2.5",
|
|
38
|
+
"ipaddr.js": "~2.2.0",
|
|
39
|
+
"is-cidr": "~6.0.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/ip6addr": "^0.2.6"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=22.0.0",
|
|
46
|
+
"yarn": ">=1.22.19"
|
|
47
|
+
},
|
|
48
|
+
"publishConfig": {
|
|
49
|
+
"access": "public",
|
|
50
|
+
"registry": "https://registry.npmjs.org/"
|
|
51
|
+
},
|
|
52
|
+
"srcMain": "src/index.ts",
|
|
53
|
+
"terascope": {
|
|
54
|
+
"enableTypedoc": true,
|
|
55
|
+
"testSuite": "unit"
|
|
56
|
+
}
|
|
57
|
+
}
|