export async function setupHttpProxy()

in src/http/httpProxy.ts [89:138]


export async function setupHttpProxy(): Promise<string> {
    return new Promise((resolve, reject) => {
        const server = http.createServer();

        server.on('request', (req, res) => {
            const invocationId = req.headers[invocationIdHeader];
            if (typeof invocationId === 'string') {
                requests[invocationId] = req;
                responses[invocationId] = res;
                invocRequestEmitter.emit(invocationId);
            } else {
                workerSystemLog('error', `Http proxy request missing header ${invocationIdHeader}`);
            }
        });

        server.on('error', (err) => {
            err = ensureErrorType(err);
            workerSystemLog('error', `Http proxy error: ${err.stack || err.message}`);
        });

        server.listen(() => {
            const address = server.address();
            // Valid address has been created
            if (address !== null && typeof address === 'object') {
                if (address.port === 0) {
                    // Auto-assigned port is 0, find and bind to an open port
                    workerSystemLog('debug', `Port 0 assigned. Finding open port.`);
                    findOpenPort((openPort: number) => {
                        // Close the server and re-listen on the found open port
                        server.close();
                        server.listen(openPort, () => {
                            workerSystemLog('debug', `Server is now listening on found open port: ${openPort}`);
                        });
                        resolve(`http://localhost:${openPort}/`);
                    });
                } else {
                    // Auto-assigned port is not 0
                    workerSystemLog('debug', `Auto-assigned port is valid. Port: ${address.port}`);
                    resolve(`http://localhost:${address.port}/`);
                }
            } else {
                reject(new AzFuncSystemError('Unexpected server address during http proxy setup'));
            }
        });

        server.on('close', () => {
            workerSystemLog('information', 'Http proxy closing');
        });
    });
}