import { createServer } from 'node:net' /** * Reserve and release an ephemeral TCP port, returning the port number. * Tests can use this to reduce port collision flakiness when spawning daemons. */ export async function getAvailablePort(): Promise { return new Promise((resolve, reject) => { const server = createServer() server.unref() server.once('error', reject) server.listen(0, '127.0.0.1', () => { const address = server.address() if (!address || typeof address === 'string') { server.close(() => { reject(new Error('Failed to resolve an available TCP port')) }) return } const { port } = address server.close((error) => { if (error) { reject(error) return } resolve(port) }) }) }) }