async function listen()

in apps/mountebank-mock/mountebank-source/src/mountebank.js [181:233]


async function listen (app, options) {
    const hostname = options.host || 'localhost',
        baseURL = `http://${hostname}:${options.port}`,
        logger = utilLogger.createLogger(options),
        isAllowedConnection = utilIp.createIPVerification(options);

    return new Promise(resolve => {
        const connections = {},
            server = app.listen(options.port, options.host, () => {
                logger.info(`mountebank v${thisPackage.version} now taking orders - point your browser to ${baseURL}/ for help`);
                logger.debug(`config: ${JSON.stringify({
                    options: options,
                    process: {
                        nodeVersion: process.version,
                        architecture: process.arch,
                        platform: process.platform
                    }
                })}`);

                resolve({
                    close: callback => {
                        server.close(() => {
                            logger.info('Adios - see you soon?');
                            callback();
                        });

                        // Force kill any open connections to prevent process hanging
                        Object.keys(connections).forEach(socket => {
                            connections[socket].destroy();
                        });
                    }
                });
            });

        server.on('connection', socket => {
            const name = helpers.socketName(socket),
                ipAddress = socket.remoteAddress;
            connections[name] = socket;

            socket.on('close', () => {
                delete connections[name];
            });

            socket.on('error', error => {
                logger.error(`${name} transmission error X=> ${JSON.stringify(error)}`);
            });

            if (!isAllowedConnection(ipAddress, logger)) {
                socket.destroy();
            }
        });
    });
}