2026-07-28 17:47:56 +08:00
|
|
|
/** Single-sample LAN-trust resolution for the /api browser-trust fence (`resolveLanTrust`). */
|
2026-07-28 15:40:02 +08:00
|
|
|
|
2026-07-28 17:47:56 +08:00
|
|
|
import { describe, expect, it, vi } from 'vitest'
|
2026-08-06 04:40:32 +08:00
|
|
|
import { resolveLanTrust } from '../src/web.ts'
|
2026-07-28 15:40:02 +08:00
|
|
|
|
|
|
|
|
vi.mock('node:os', () => ({
|
|
|
|
|
networkInterfaces: () => ({
|
|
|
|
|
lo0: [
|
|
|
|
|
{ family: 'IPv4', internal: true, address: '127.0.0.1' },
|
|
|
|
|
],
|
|
|
|
|
en0: [
|
|
|
|
|
{ family: 'IPv6', internal: false, address: 'fe80::1' },
|
|
|
|
|
{ family: 'IPv4', internal: false, address: '192.168.1.5' },
|
|
|
|
|
],
|
|
|
|
|
en1: [
|
|
|
|
|
{ family: 'IPv4', internal: false, address: '10.0.0.7' },
|
|
|
|
|
],
|
|
|
|
|
utun0: undefined,
|
|
|
|
|
}),
|
|
|
|
|
}))
|
|
|
|
|
|
2026-07-28 17:47:56 +08:00
|
|
|
describe('resolveLanTrust', () => {
|
|
|
|
|
it('samples non-internal IPv4 addresses once for an all-interfaces bind: trust and display share them', () => {
|
|
|
|
|
const { lanAddresses, trustedHosts } = resolveLanTrust('0.0.0.0', ['harness.internal:3080'])
|
|
|
|
|
expect(lanAddresses).toEqual(['192.168.1.5', '10.0.0.7'])
|
|
|
|
|
expect(trustedHosts).toEqual(['192.168.1.5', '10.0.0.7', 'harness.internal:3080'])
|
2026-07-28 15:40:02 +08:00
|
|
|
})
|
|
|
|
|
|
2026-07-28 17:47:56 +08:00
|
|
|
it('derives nothing for a loopback or unresolved bind — extras alone stand, no LAN URL to print', () => {
|
|
|
|
|
expect(resolveLanTrust('127.0.0.1', [])).toEqual({ lanAddresses: [], trustedHosts: [] })
|
|
|
|
|
expect(resolveLanTrust(undefined, ['lab.internal'])).toEqual({ lanAddresses: [], trustedHosts: ['lab.internal'] })
|
2026-07-28 15:40:02 +08:00
|
|
|
})
|
|
|
|
|
})
|