verdaccio
Version:
A lightweight private npm proxy registry
82 lines (81 loc) • 2.84 kB
JavaScript
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