diff --git a/packages/devtools/src/module-main.ts b/packages/devtools/src/module-main.ts index 0acca022ad..f857a078e9 100644 --- a/packages/devtools/src/module-main.ts +++ b/packages/devtools/src/module-main.ts @@ -148,10 +148,15 @@ export async function enableModule(options: ModuleOptions, nuxt: Nuxt) { // Nuxt serves the app through its own public listener while Vite runs on an // internal port behind it. Keep the public origin from Nuxt's listener so // Devframe's auth URL does not expose Vite's internal port. + // Also allow every origin Nuxt listens on (e.g. LAN IPs with `--host`), so + // Vite DevTools does not reject them as non-loopback. let publicDevServerOrigin: string | undefined - nuxt.hook('listen', (_server, listener) => { + const allowedOrigins: string[] = [] + nuxt.hook('listen', async (_server, listener) => { if (listener?.url) publicDevServerOrigin = new URL(listener.url).origin + const urls: { url: string }[] = await listener?.getURLs?.() ?? [] + allowedOrigins.push(...urls.map(({ url }) => new URL(url).origin)) }) const branding: DevToolsConfig['branding'] = { @@ -167,6 +172,7 @@ export async function enableModule(options: ModuleOptions, nuxt: Nuxt) { } viteDevToolsDefaults.branding = branding + viteDevToolsDefaults.allowedOrigins = allowedOrigins // Vite 8.3+ registers the Vite DevTools integration itself from the // top-level `devtools` config option (vitejs/vite#23333), which keeps the @@ -177,6 +183,11 @@ export async function enableModule(options: ModuleOptions, nuxt: Nuxt) { // to it directly. if (isGreaterThanOrEqual(viteVersion, '8.3.0')) { extendViteDevToolsConfig((devtools) => { + // Merged rather than defaulted, so user origins don't drop the listener's. + devtools.allowedOrigins = [ + ...devtools.allowedOrigins ?? [], + ...allowedOrigins, + ] for (const [key, value] of Object.entries(viteDevToolsDefaults)) (devtools as Record)[key] ??= value }) diff --git a/skills-lock.json b/skills-lock.json index d7ce4f62b0..14417be20c 100644 --- a/skills-lock.json +++ b/skills-lock.json @@ -25,14 +25,14 @@ "source": "antfu/skills", "sourceType": "github", "skillPath": "skills/antfu-create-pr/SKILL.md", - "computedHash": "1838f2c70d58f145dd7779358618ca7ed2967085ef7a8776b40bfc7197cf11a2", + "computedHash": "19fc3e48bd3d2adcdb374416e7b6dac0102b4579b6ea7eed247d7e7f014c3015", "via": "@antfu/skills" }, "antfu-issue-triage": { "source": "antfu/skills", "sourceType": "github", "skillPath": "skills/antfu-issue-triage/SKILL.md", - "computedHash": "a6604cd24a1e341d49b783145b82f847f8b5c534b6be719066ddee3a74c9ff87", + "computedHash": "efba543cad37aebdcfe00422cce3db46a232d470bc7f54781cc4b96351ce0cd9", "via": "@antfu/skills" }, "code-review": {