UNPKG

verdaccio

Version:

A lightweight private npm proxy registry

82 lines (81 loc) 2.84 kB
import { logger } from "./logger/index.mjs"; import { initLogger } from "./utils.mjs"; import api_default from "../api/index.mjs"; import { displayExperimentsInfoBox } from "./experiments.mjs"; import _ from "lodash"; import createDebug from "debug"; import { getConfigParsed, getListenAddress } from "@verdaccio/config"; import fs from "fs"; import constants from "constants"; import http from "http"; import https from "https"; //#region src/lib/run-server.ts var debug = createDebug("verdaccio:run-server"); /** * Exposes a server factory to be instantiated programmatically. * const app = await runServer(); // default configuration const app = await runServer('./config/config.yaml'); const app = await runServer({ configuration }); app.listen(4000, (event) => { // do something }); * @param config */ async function runServer(config, options) { const configurationParsed = getConfigParsed(config); initLogger(configurationParsed); displayExperimentsInfoBox({ ...configurationParsed?.flags || {}, ...configurationParsed?.experiments || {} }); return createServerFactory(configurationParsed, getListenAddress(options?.listenArg ?? configurationParsed?.listen, logger), await api_default(configurationParsed)); } /** * Return a native HTTP/HTTPS server instance * @param config * @param addr * @param app */ function createServerFactory(config, addr, app) { let serverFactory; if (addr.proto === "https") { debug("https enabled"); try { let httpsOptions = { secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 }; const keyCertConfig = config.https; const pfxConfig = config.https; if (!(keyCertConfig.key && keyCertConfig.cert || pfxConfig.pfx)) throw Error("bad format https configuration"); if (pfxConfig.pfx) { const { pfx, passphrase } = pfxConfig; httpsOptions = _.assign(httpsOptions, { pfx: fs.readFileSync(pfx), passphrase: passphrase || "" }); } else { const { key, cert, ca } = keyCertConfig; httpsOptions = _.assign(httpsOptions, { key: fs.readFileSync(key), cert: fs.readFileSync(cert), ...ca && { ca: fs.readFileSync(ca) } }); } serverFactory = https.createServer(httpsOptions, app); } catch (err) { logger.fatal({ err }, "cannot create server: @{err.message}"); process.exit(2); } } else { debug("http enabled"); serverFactory = http.createServer(app); } if (config.server && typeof config.server.keepAliveTimeout !== "undefined" && config.server.keepAliveTimeout !== "null") serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1e3; unlinkAddressPath(addr); return serverFactory; } function unlinkAddressPath(addr) { if (addr.path && fs.existsSync(addr.path)) fs.unlinkSync(addr.path); } //#endregion export { createServerFactory, runServer }; //# sourceMappingURL=run-server.mjs.map