From da9c3d806c28a90872b2d310c5646f5dc22cb9d7 Mon Sep 17 00:00:00 2001 From: cosieLq <32099671+cosieLq@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:23:45 +0100 Subject: [PATCH 1/7] Add a helper function in server-address --- .../utils/__tests__/server-address.test.ts | 19 +++++++++++++++---- .../src/utils/server-address.test.ts | 1 - .../core-server/src/utils/server-address.ts | 14 ++++++++++++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/code/lib/core-server/src/utils/__tests__/server-address.test.ts b/code/lib/core-server/src/utils/__tests__/server-address.test.ts index 3c2fb3defe91..00acdedbcd8e 100644 --- a/code/lib/core-server/src/utils/__tests__/server-address.test.ts +++ b/code/lib/core-server/src/utils/__tests__/server-address.test.ts @@ -1,13 +1,24 @@ import { describe, beforeEach, it, expect, vi } from 'vitest'; -import ip from 'ip'; +import os from 'os'; import { getServerAddresses } from '../server-address'; -vi.mock('ip'); -const mockedIp = vi.mocked(ip); +vi.mock('os'); +const mockedOs = vi.mocked(os); describe('getServerAddresses', () => { beforeEach(() => { - mockedIp.address.mockReturnValue('192.168.0.5'); + mockedOs.networkInterfaces.mockReturnValue({ + eth0: [ + { + address: '192.168.0.5', + netmask: '255.255.255.0', + family: 'IPv4', + mac: '01:02:03:0a:0b:0c', + internal: false, + cidr: '192.168.1.108/24', + }, + ], + }); }); it('builds addresses with a specified host', () => { diff --git a/code/lib/core-server/src/utils/server-address.test.ts b/code/lib/core-server/src/utils/server-address.test.ts index e1a0b757c2ee..1aea47afebc5 100644 --- a/code/lib/core-server/src/utils/server-address.test.ts +++ b/code/lib/core-server/src/utils/server-address.test.ts @@ -2,7 +2,6 @@ import { describe, it, expect, vi } from 'vitest'; import detectPort from 'detect-port'; import { getServerAddresses, getServerPort, getServerChannelUrl } from './server-address'; -vi.mock('ip'); vi.mock('detect-port'); vi.mock('@storybook/node-logger'); diff --git a/code/lib/core-server/src/utils/server-address.ts b/code/lib/core-server/src/utils/server-address.ts index bfcb2ba969d9..06897f10ac69 100644 --- a/code/lib/core-server/src/utils/server-address.ts +++ b/code/lib/core-server/src/utils/server-address.ts @@ -1,4 +1,4 @@ -import ip from 'ip'; +import os from 'os'; import { logger } from '@storybook/node-logger'; import detectFreePort from 'detect-port'; @@ -10,7 +10,7 @@ export function getServerAddresses( initialPath?: string ) { const address = new URL(`${proto}://localhost:${port}/`); - const networkAddress = new URL(`${proto}://${host || ip.address()}:${port}/`); + const networkAddress = new URL(`${proto}://${host || getLocalIp()}:${port}/`); if (initialPath) { const searchParams = `?path=${decodeURIComponent( @@ -46,3 +46,13 @@ export const getServerPort = (port?: number, { exactPort }: PortOptions = {}) => export const getServerChannelUrl = (port: number, { https }: { https?: boolean }) => { return `${https ? 'wss' : 'ws'}://localhost:${port}/storybook-server-channel`; }; + +const getLocalIp = () => { + const allIps = Object.values(os.networkInterfaces()).flat(); + const allFilteredIps = allIps.filter( + (networkAddress) => + networkAddress && networkAddress.family === 'IPv4' && !networkAddress.internal + ); + + return allFilteredIps[0]?.address || '127.0.0.1'; +}; From b6b3370804912be60dd30274d56b83ded938d7ae Mon Sep 17 00:00:00 2001 From: cosieLq <32099671+cosieLq@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:48:23 +0100 Subject: [PATCH 2/7] Remove ip from dependency --- code/lib/core-server/package.json | 2 -- code/yarn.lock | 11 ----------- 2 files changed, 13 deletions(-) diff --git a/code/lib/core-server/package.json b/code/lib/core-server/package.json index 8c00601edba7..467633f875d9 100644 --- a/code/lib/core-server/package.json +++ b/code/lib/core-server/package.json @@ -87,7 +87,6 @@ "express": "^4.19.2", "fs-extra": "^11.1.0", "globby": "^14.0.1", - "ip": "^2.0.1", "lodash": "^4.17.21", "open": "^8.4.0", "pretty-hrtime": "^1.0.3", @@ -105,7 +104,6 @@ "devDependencies": { "@storybook/addon-docs": "workspace:*", "@types/compression": "^1.7.0", - "@types/ip": "^1.1.0", "@types/node-fetch": "^2.5.7", "@types/ws": "^8", "boxen": "^7.1.1", diff --git a/code/yarn.lock b/code/yarn.lock index f2edc299accc..21c170560c18 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -6051,7 +6051,6 @@ __metadata: "@types/compression": "npm:^1.7.0" "@types/detect-port": "npm:^1.3.0" "@types/diff": "npm:^5.0.9" - "@types/ip": "npm:^1.1.0" "@types/node": "npm:^18.0.0" "@types/node-fetch": "npm:^2.5.7" "@types/pretty-hrtime": "npm:^1.0.0" @@ -6068,7 +6067,6 @@ __metadata: express: "npm:^4.19.2" fs-extra: "npm:^11.1.0" globby: "npm:^14.0.1" - ip: "npm:^2.0.1" lodash: "npm:^4.17.21" node-fetch: "npm:^3.3.1" open: "npm:^8.4.0" @@ -8047,15 +8045,6 @@ __metadata: languageName: node linkType: hard -"@types/ip@npm:^1.1.0": - version: 1.1.3 - resolution: "@types/ip@npm:1.1.3" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/af576e33830196be01b71c48ad5f83380a1c51d62f394a5601e8c2a5b8b31cf6dc8fe71ac39c38d806bcf1d6f1c5c8205c129eca6b6d168c0df7ab3722df23b9 - languageName: node - linkType: hard - "@types/is-empty@npm:^1.0.0": version: 1.2.3 resolution: "@types/is-empty@npm:1.2.3" From c628613470665155352a649e2f149ed2e4b2f84b Mon Sep 17 00:00:00 2001 From: cosieLq <32099671+cosieLq@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:51:30 +0100 Subject: [PATCH 3/7] Make mock response from networkInterfaces correct --- code/lib/core-server/src/utils/__tests__/server-address.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/lib/core-server/src/utils/__tests__/server-address.test.ts b/code/lib/core-server/src/utils/__tests__/server-address.test.ts index 00acdedbcd8e..51653e6f1027 100644 --- a/code/lib/core-server/src/utils/__tests__/server-address.test.ts +++ b/code/lib/core-server/src/utils/__tests__/server-address.test.ts @@ -15,7 +15,7 @@ describe('getServerAddresses', () => { family: 'IPv4', mac: '01:02:03:0a:0b:0c', internal: false, - cidr: '192.168.1.108/24', + cidr: '192.168.0.5/24', }, ], }); From b7082dbf654aecb45a3b5f452d8722e4f95d44a4 Mon Sep 17 00:00:00 2001 From: cosieLq <32099671+cosieLq@users.noreply.github.com> Date: Sat, 17 Feb 2024 10:29:10 +0100 Subject: [PATCH 4/7] Add condition check --- code/lib/core-server/src/utils/server-address.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/code/lib/core-server/src/utils/server-address.ts b/code/lib/core-server/src/utils/server-address.ts index 06897f10ac69..6d8edf6fba71 100644 --- a/code/lib/core-server/src/utils/server-address.ts +++ b/code/lib/core-server/src/utils/server-address.ts @@ -49,10 +49,7 @@ export const getServerChannelUrl = (port: number, { https }: { https?: boolean } const getLocalIp = () => { const allIps = Object.values(os.networkInterfaces()).flat(); - const allFilteredIps = allIps.filter( - (networkAddress) => - networkAddress && networkAddress.family === 'IPv4' && !networkAddress.internal - ); + const allFilteredIps = allIps.filter((ip) => ip && ip.family === 'IPv4' && !ip.internal); - return allFilteredIps[0]?.address || '127.0.0.1'; + return allFilteredIps.length ? allFilteredIps[0]?.address : '127.0.0.1'; }; From 1d5c9393a39684e964005e9be0a31283f708f7fc Mon Sep 17 00:00:00 2001 From: cosieLq <32099671+cosieLq@users.noreply.github.com> Date: Sat, 17 Feb 2024 10:52:59 +0100 Subject: [PATCH 5/7] Add some unit test --- .../utils/__tests__/server-address.test.ts | 33 ++++++++++++------- .../src/utils/server-address.test.ts | 1 + 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/code/lib/core-server/src/utils/__tests__/server-address.test.ts b/code/lib/core-server/src/utils/__tests__/server-address.test.ts index 51653e6f1027..ea3a4ca1766d 100644 --- a/code/lib/core-server/src/utils/__tests__/server-address.test.ts +++ b/code/lib/core-server/src/utils/__tests__/server-address.test.ts @@ -1,23 +1,23 @@ import { describe, beforeEach, it, expect, vi } from 'vitest'; -import os from 'os'; +import os, { type NetworkInterfaceInfoIPv4 } from 'os'; import { getServerAddresses } from '../server-address'; vi.mock('os'); const mockedOs = vi.mocked(os); describe('getServerAddresses', () => { + const mockedNetworkAddress: NetworkInterfaceInfoIPv4 = { + address: '192.168.0.5', + netmask: '255.255.255.0', + family: 'IPv4', + mac: '01:02:03:0a:0b:0c', + internal: false, + cidr: '192.168.0.5/24', + }; + beforeEach(() => { mockedOs.networkInterfaces.mockReturnValue({ - eth0: [ - { - address: '192.168.0.5', - netmask: '255.255.255.0', - family: 'IPv4', - mac: '01:02:03:0a:0b:0c', - internal: false, - cidr: '192.168.0.5/24', - }, - ], + eth0: [mockedNetworkAddress], }); }); @@ -30,6 +30,15 @@ describe('getServerAddresses', () => { it('builds addresses with local IP when host is not specified', () => { const { address, networkAddress } = getServerAddresses(9009, '', 'http'); expect(address).toEqual('http://localhost:9009/'); - expect(networkAddress).toEqual('http://192.168.0.5:9009/'); + expect(networkAddress).toEqual(`http://${mockedNetworkAddress.address}:9009/`); + }); + + it('builds addresses with loopback IP when host is not specified and external IPv4 is not found', () => { + mockedOs.networkInterfaces.mockReturnValueOnce({ + eth0: [{ ...mockedNetworkAddress, internal: true }], + }); + const { address, networkAddress } = getServerAddresses(9009, '', 'http'); + expect(address).toEqual('http://localhost:9009/'); + expect(networkAddress).toEqual('http://127.0.0.1:9009/'); }); }); diff --git a/code/lib/core-server/src/utils/server-address.test.ts b/code/lib/core-server/src/utils/server-address.test.ts index 1aea47afebc5..85299cb12f7b 100644 --- a/code/lib/core-server/src/utils/server-address.test.ts +++ b/code/lib/core-server/src/utils/server-address.test.ts @@ -2,6 +2,7 @@ import { describe, it, expect, vi } from 'vitest'; import detectPort from 'detect-port'; import { getServerAddresses, getServerPort, getServerChannelUrl } from './server-address'; +vi.mock('os'); vi.mock('detect-port'); vi.mock('@storybook/node-logger'); From 48913355bf8913ae4e1f76ac7048b8f9cf883d7c Mon Sep 17 00:00:00 2001 From: cosieLq <32099671+cosieLq@users.noreply.github.com> Date: Sun, 18 Feb 2024 20:36:25 +0100 Subject: [PATCH 6/7] Change default address to 0.0.0.0 --- .../core-server/src/utils/__tests__/server-address.test.ts | 4 ++-- code/lib/core-server/src/utils/server-address.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/lib/core-server/src/utils/__tests__/server-address.test.ts b/code/lib/core-server/src/utils/__tests__/server-address.test.ts index ea3a4ca1766d..4b3636ee9e84 100644 --- a/code/lib/core-server/src/utils/__tests__/server-address.test.ts +++ b/code/lib/core-server/src/utils/__tests__/server-address.test.ts @@ -33,12 +33,12 @@ describe('getServerAddresses', () => { expect(networkAddress).toEqual(`http://${mockedNetworkAddress.address}:9009/`); }); - it('builds addresses with loopback IP when host is not specified and external IPv4 is not found', () => { + it('builds addresses with default address when host is not specified and external IPv4 is not found', () => { mockedOs.networkInterfaces.mockReturnValueOnce({ eth0: [{ ...mockedNetworkAddress, internal: true }], }); const { address, networkAddress } = getServerAddresses(9009, '', 'http'); expect(address).toEqual('http://localhost:9009/'); - expect(networkAddress).toEqual('http://127.0.0.1:9009/'); + expect(networkAddress).toEqual('http://0.0.0.0:9009/'); }); }); diff --git a/code/lib/core-server/src/utils/server-address.ts b/code/lib/core-server/src/utils/server-address.ts index 6d8edf6fba71..4d49cf8a980a 100644 --- a/code/lib/core-server/src/utils/server-address.ts +++ b/code/lib/core-server/src/utils/server-address.ts @@ -51,5 +51,5 @@ const getLocalIp = () => { const allIps = Object.values(os.networkInterfaces()).flat(); const allFilteredIps = allIps.filter((ip) => ip && ip.family === 'IPv4' && !ip.internal); - return allFilteredIps.length ? allFilteredIps[0]?.address : '127.0.0.1'; + return allFilteredIps.length ? allFilteredIps[0]?.address : '0.0.0.0'; }; From 07e8bc7b6899cbc37b7a75604d3aef6d6ce0311c Mon Sep 17 00:00:00 2001 From: Tony Trinh Date: Tue, 4 Jun 2024 18:48:05 -0500 Subject: [PATCH 7/7] chore: update code/yarn.lock --- code/yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/yarn.lock b/code/yarn.lock index 21c170560c18..60936fb56b7a 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -17649,7 +17649,7 @@ __metadata: languageName: node linkType: hard -"ip@npm:^2.0.0, ip@npm:^2.0.1": +"ip@npm:^2.0.0": version: 2.0.1 resolution: "ip@npm:2.0.1" checksum: 10c0/cab8eb3e88d0abe23e4724829621ec4c4c5cb41a7f936a2e626c947128c1be16ed543448d42af7cca95379f9892bfcacc1ccd8d09bc7e8bea0e86d492ce33616