mybase 1.1.14 → 1.1.15

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.
@@ -1,32 +1,31 @@
1
- const { isLoopbackIP } = require('./../mybase'); // adjust the path to mybase.js
1
+ const { isLoopbackIP } = require('./../mybase') // adjust the path to mybase.js
2
2
 
3
3
  test('should return true for local IPv4', () => {
4
- const ip = '127.0.0.1';
5
- expect(isLoopbackIP(ip)).toBe(true);
6
- });
4
+ const ip = '127.0.0.1'
5
+ expect(isLoopbackIP(ip)).toBe(true)
6
+ })
7
7
 
8
8
  test('should return true for local IPv4', () => {
9
- const ip = '127.127.127.127';
10
- expect(isLoopbackIP(ip)).toBe(true);
11
- });
12
-
9
+ const ip = '127.127.127.127'
10
+ expect(isLoopbackIP(ip)).toBe(true)
11
+ })
13
12
 
14
13
  test('should return true for local IPv6', () => {
15
- const ip = '::1';
16
- expect(isLoopbackIP(ip)).toBe(true);
17
- });
14
+ const ip = '::1'
15
+ expect(isLoopbackIP(ip)).toBe(true)
16
+ })
18
17
 
19
18
  test('should return null for non-local IPv4', () => {
20
- const ip = '8.8.8.8';
21
- expect(isLoopbackIP(ip)).toBe(null);
22
- });
19
+ const ip = '8.8.8.8'
20
+ expect(isLoopbackIP(ip)).toBe(null)
21
+ })
23
22
 
24
23
  test('should return null for non-local IPv6', () => {
25
- const ip = '2001:4860:4860::8888';
26
- expect(isLoopbackIP(ip)).toBe(null);
27
- });
24
+ const ip = '2001:4860:4860::8888'
25
+ expect(isLoopbackIP(ip)).toBe(null)
26
+ })
28
27
 
29
28
  test('should return false for invalid IP', () => {
30
- const ip = 'invalid';
31
- expect(isLoopbackIP(ip)).toBe(false);
32
- });
29
+ const ip = 'invalid'
30
+ expect(isLoopbackIP(ip)).toBe(false)
31
+ })
package/jest.config.js CHANGED
@@ -2,4 +2,5 @@
2
2
  module.exports = {
3
3
  preset: 'ts-jest',
4
4
  testEnvironment: 'node',
5
+ testTimeout: 15000,
5
6
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mybase",
3
- "version": "1.1.14",
3
+ "version": "1.1.15",
4
4
  "description": "",
5
5
  "main": "mybase.js",
6
6
  "scripts": {
@@ -25,6 +25,7 @@
25
25
  "devDependencies": {
26
26
  "@jest/globals": "^29.7.0",
27
27
  "@types/debug": "^4.1.12",
28
+ "@types/ip6addr": "^0.2.6",
28
29
  "@types/jest": "^29.5.11",
29
30
  "@types/node": "^20.11.5",
30
31
  "@types/validator": "^13.11.8",
@@ -0,0 +1 @@
1
+ export declare function isLoopbackIP(ip: string): boolean;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isLoopbackIP = void 0;
7
+ const ip6addr_1 = __importDefault(require("ip6addr"));
8
+ const net_1 = __importDefault(require("net"));
9
+ const local_network_cidrs = [ip6addr_1.default.createCIDR('127.0.0.0/8'),
10
+ ip6addr_1.default.createCIDR('::1/128')];
11
+ function normalizeIp(ip) {
12
+ // also support ipv6
13
+ if (net_1.default.isIP(ip) === 0)
14
+ return '';
15
+ if (net_1.default.isIPv6(ip))
16
+ return ip.toLowerCase().replace(/^::ffff:/, '');
17
+ return ip;
18
+ }
19
+ function isLoopbackIP(ip) {
20
+ ip = normalizeIp(ip);
21
+ if (net_1.default.isIP(ip) === 0)
22
+ return false;
23
+ try {
24
+ // speed optimized
25
+ let ipVersion = net_1.default.isIPv4(ip) ? 'ipv4' : 'ipv6';
26
+ for (let cidr of local_network_cidrs) {
27
+ let first = cidr.first();
28
+ if (first.kind() !== ipVersion)
29
+ continue;
30
+ if (cidr.contains(ip))
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+ catch (err) {
36
+ console.log(err);
37
+ }
38
+ return false;
39
+ }
40
+ exports.isLoopbackIP = isLoopbackIP;
@@ -0,0 +1,69 @@
1
+ import { randomIP } from './randomIP';
2
+ import { isLoopbackIP } from './isLoopbackIP';
3
+
4
+ describe('isLoopbackIP', () => {
5
+ test('should return true for loopback IPv4 address', () => {
6
+ expect(isLoopbackIP('127.0.0.1')).toBe(true);
7
+ });
8
+
9
+ test('should return true for loopback IPv6 address', () => {
10
+ expect(isLoopbackIP('::1')).toBe(true);
11
+ });
12
+
13
+ test('should return false for non-loopback IPv4 address', () => {
14
+ expect(isLoopbackIP('192.168.0.1')).toBe(false);
15
+ });
16
+
17
+ test('should return false for non-loopback IPv6 address', () => {
18
+ expect(isLoopbackIP('2001:0db8:85a3:0000:0000:8a2e:0370:7334')).toBe(false);
19
+ });
20
+
21
+ test('should return false for invalid IP address', () => {
22
+ expect(isLoopbackIP('invalid')).toBe(false);
23
+ });
24
+
25
+ test('should return true for local IPv4', () => {
26
+ const ip = '127.0.0.1'
27
+ expect(isLoopbackIP(ip)).toBe(true)
28
+ })
29
+
30
+ test('should return true for local IPv4', () => {
31
+ const ip = '127.2.0.1'
32
+ expect(isLoopbackIP(ip)).toBe(true)
33
+ })
34
+
35
+ test('should return true for local IPv4', () => {
36
+ const ip = '127.255.0.1'
37
+ expect(isLoopbackIP(ip)).toBe(true)
38
+ })
39
+
40
+ test('should return true for local IPv4', () => {
41
+ const ip = '127.127.127.127'
42
+ expect(isLoopbackIP(ip)).toBe(true)
43
+ })
44
+
45
+ test('should return true for local IPv6', () => {
46
+ const ip = '::1'
47
+ expect(isLoopbackIP(ip)).toBe(true)
48
+ })
49
+
50
+ test('should return null for non-local IPv4', () => {
51
+ const ip = '8.8.8.8'
52
+ expect(isLoopbackIP(ip)).toBe(false)
53
+ })
54
+
55
+ test('should return null for non-local IPv6', () => {
56
+ const ip = '2001:4860:4860::8888'
57
+ expect(isLoopbackIP(ip)).toBe(false)
58
+ })
59
+
60
+ test('should return false for invalid IP', () => {
61
+ const ip = 'invalid'
62
+ expect(isLoopbackIP(ip)).toBe(false)
63
+ })
64
+
65
+ test('random ips should not be Loopback', () => {
66
+ for(let i=0;i<100;i++)
67
+ expect(isLoopbackIP(randomIP())).toBe(false)
68
+ })
69
+ });
@@ -0,0 +1,33 @@
1
+ import ip6addr from 'ip6addr'
2
+ import net from 'net'
3
+
4
+ const local_network_cidrs = [ip6addr.createCIDR('127.0.0.0/8')
5
+ ,ip6addr.createCIDR('::1/128')]
6
+
7
+
8
+ function normalizeIp(ip:string):string {
9
+ // also support ipv6
10
+ if (net.isIP(ip) === 0) return ''
11
+ if (net.isIPv6(ip)) return ip.toLowerCase().replace(/^::ffff:/, '')
12
+ return ip
13
+ }
14
+
15
+
16
+ export function isLoopbackIP(ip:string) : boolean {
17
+ ip=normalizeIp(ip)
18
+ if (net.isIP(ip) === 0) return false
19
+ try {
20
+ // speed optimized
21
+ let ipVersion = net.isIPv4(ip) ? 'ipv4' : 'ipv6'
22
+ for (let cidr of local_network_cidrs) {
23
+ let first = cidr.first()
24
+ if (first.kind() !== ipVersion) continue
25
+ if (cidr.contains(ip))
26
+ return true
27
+ }
28
+ return false
29
+ } catch (err) {
30
+ console.log(err)
31
+ }
32
+ return false
33
+ }
@@ -59,4 +59,4 @@ describe("randomTCPPort", () => {
59
59
  expect(port).toBe(false);
60
60
  });
61
61
 
62
- });
62
+ })
package/ts/index.d.ts CHANGED
@@ -16,3 +16,4 @@ export * from "./funcs/int2ip";
16
16
  export * from "./funcs/randomIP6";
17
17
  export * from "./funcs/randomTCPPort";
18
18
  export * from "./funcs/validEmail";
19
+ export * from "./funcs/isLoopbackIP";
package/ts/index.js CHANGED
@@ -32,3 +32,4 @@ __exportStar(require("./funcs/int2ip"), exports);
32
32
  __exportStar(require("./funcs/randomIP6"), exports);
33
33
  __exportStar(require("./funcs/randomTCPPort"), exports);
34
34
  __exportStar(require("./funcs/validEmail"), exports);
35
+ __exportStar(require("./funcs/isLoopbackIP"), exports);
package/ts/index.ts CHANGED
@@ -16,4 +16,5 @@ export * from "./funcs/int2ip"
16
16
  export * from "./funcs/randomIP6"
17
17
  export * from "./funcs/randomTCPPort"
18
18
  export * from "./funcs/validEmail"
19
+ export * from "./funcs/isLoopbackIP"
19
20