diff --git a/src/media/host.ts b/src/media/host.ts index 6c774ba74..5dfbec68c 100644 --- a/src/media/host.ts +++ b/src/media/host.ts @@ -44,7 +44,7 @@ export async function ensureMediaHosted( if (!mediaServer) { mediaServer = await startMediaServer(port, TTL_MS, runtime); logInfo( - `🦞 Started temporary media host on http://localhost:${port}/media/:id (TTL ${TTL_MS / 1000}s)`, + `🦞 Started temporary media host on http://127.0.0.1:${port}/media/:id (TTL ${TTL_MS / 1000}s)`, runtime, ); mediaServer.unref?.(); diff --git a/src/media/server.test.ts b/src/media/server.test.ts index 34182c5f2..4adcc92d8 100644 --- a/src/media/server.test.ts +++ b/src/media/server.test.ts @@ -54,6 +54,13 @@ describe("media server", () => { await new Promise((r) => server.close(r)); }); + it("binds to loopback by default", async () => { + const server = await startMediaServer(0, 5_000); + const addr = server.address() as AddressInfo; + expect(["127.0.0.1", "::1"]).toContain(addr.address); + await new Promise((r) => server.close(r)); + }); + it("expires old media", async () => { const file = path.join(MEDIA_DIR, "old"); await fs.writeFile(file, "stale"); diff --git a/src/media/server.ts b/src/media/server.ts index 4791352d8..aaca6577b 100644 --- a/src/media/server.ts +++ b/src/media/server.ts @@ -84,11 +84,12 @@ export async function startMediaServer( port: number, ttlMs = DEFAULT_TTL_MS, runtime: RuntimeEnv = defaultRuntime, + host = "127.0.0.1", ): Promise { const app = express(); attachMediaRoutes(app, ttlMs, runtime); return await new Promise((resolve, reject) => { - const server = app.listen(port); + const server = app.listen(port, host); server.once("listening", () => resolve(server)); server.once("error", (err) => { runtime.error(danger(`Media server failed: ${String(err)}`));