verdaccio
Version:
A lightweight private npm proxy registry
1 lines • 7.85 kB
Source Map (JSON)
{"version":3,"file":"bootstrap.mjs","names":[],"sources":["../../src/lib/bootstrap.ts"],"sourcesContent":["import { debug } from 'console';\nimport constants from 'constants';\nimport express from 'express';\nimport { Application } from 'express';\nimport fs from 'fs';\nimport http from 'http';\nimport https from 'https';\nimport _ from 'lodash';\nimport URL from 'url';\n\nimport { getListenAddress } from '@verdaccio/config';\nimport { Callback, ConfigYaml, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';\n\nimport endPointAPI from '../api/index';\nimport { API_ERROR } from './constants';\nimport { displayExperimentsInfoBox } from './experiments';\nimport { logger } from './logger';\nimport { initLogger, logHTTPSWarning } from './utils';\n\n/**\n * Trigger the server after configuration has been loaded.\n * @param {Object} config\n * @param {Object} cliArguments\n * @param {String} configPath\n * @param {String} pkgVersion\n * @param {String} pkgName\n * @deprecated use runServer instead\n */\nfunction startVerdaccio(\n config: ConfigYaml,\n cliListen: string,\n configPath: string,\n pkgVersion: string,\n pkgName: string,\n callback: Callback\n): void {\n if (_.isObject(config) === false) {\n throw new Error(API_ERROR.CONFIG_BAD_FORMAT);\n }\n\n initLogger(config);\n\n // merge flags and experiments for backward compatibility\n const flags = {\n ...(config?.flags || {}),\n ...(config?.experiments || {}),\n };\n displayExperimentsInfoBox(flags);\n logger.warn('This is a deprecated method, please use runServer instead');\n\n endPointAPI(config).then((app): void => {\n const listen = cliListen ?? config?.listen;\n const addr = getListenAddress(listen, logger);\n let webServer;\n if (addr.proto === 'https') {\n webServer = handleHTTPS(app, configPath, config);\n } else {\n // http\n webServer = http.createServer(app);\n }\n if (webServer && typeof config?.server?.keepAliveTimeout === 'number') {\n // library definition for node is not up to date (doesn't contain recent 8.0 changes)\n webServer.keepAliveTimeout = config.server.keepAliveTimeout * 1000;\n }\n unlinkAddressPath(addr);\n callback(webServer, addr, pkgName, pkgVersion);\n });\n}\n\nfunction unlinkAddressPath(addr) {\n if (addr.path && fs.existsSync(addr.path)) {\n fs.unlinkSync(addr.path);\n }\n}\n\nfunction handleHTTPS(\n app: express.Application,\n configPath: string,\n config: ConfigYaml\n): https.Server {\n try {\n let httpsOptions = {\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3, // disable insecure SSLv2 and SSLv3\n };\n const keyCertConfig = config.https as HttpsConfKeyCert;\n const pfxConfig = config.https as HttpsConfPfx;\n\n const missingKeyCert = !(keyCertConfig.key && keyCertConfig.cert);\n debug('missingKeyCert', missingKeyCert);\n const missingPfx = !pfxConfig.pfx;\n debug('missingPfx', missingPfx);\n\n if (missingKeyCert && missingPfx) {\n debug('No HTTPS configuration found');\n logHTTPSWarning(configPath);\n throw new Error('No HTTPS configuration found');\n }\n\n debug('HTTPS configuration found');\n if (pfxConfig.pfx) {\n debug('Using PFX configuration');\n const { pfx, passphrase } = pfxConfig;\n httpsOptions = _.assign(httpsOptions, {\n pfx: fs.readFileSync(pfx),\n passphrase: passphrase || '',\n });\n } else {\n debug('Using Key/Cert configuration');\n const { key, cert, ca } = keyCertConfig;\n httpsOptions = _.assign(httpsOptions, {\n key: fs.readFileSync(key),\n cert: fs.readFileSync(cert),\n ...(ca && {\n ca: fs.readFileSync(ca),\n }),\n });\n }\n return https.createServer(httpsOptions, app);\n } catch (err: any) {\n // catch errors related to certificate loading\n logger.fatal({ err: err }, 'cannot create https server: @{err.message}');\n process.exit(2);\n }\n}\n/**\n *\n * @param webServer\n * @param addr\n * @param pkgName\n * @param pkgVersion\n * @deprecated use initServer instead\n */\nfunction listenDefaultCallback(\n webServer: Application,\n addr: any,\n pkgName: string,\n pkgVersion: string\n): void {\n const server = webServer\n .listen(addr.port || addr.path, addr.host, (): void => {\n // send a message for tests\n if (_.isFunction(process.send)) {\n process.send({\n verdaccio_started: true,\n });\n }\n })\n .on('error', function (err): void {\n logger.fatal({ err: err }, 'cannot create http server: @{err.message}');\n process.exit(2);\n });\n\n function handleShutdownGracefully() {\n logger.fatal('received shutdown signal - closing server gracefully...');\n server.close(() => {\n logger.info('server closed.');\n process.exit(0);\n });\n }\n\n // handle shutdown signals nicely when environment says so\n if (process.env.VERDACCIO_HANDLE_KILL_SIGNALS === 'true') {\n process.on('SIGINT', handleShutdownGracefully);\n process.on('SIGTERM', handleShutdownGracefully);\n process.on('SIGHUP', handleShutdownGracefully);\n }\n\n logger.warn(\n {\n addr: addr.path\n ? URL.format({\n protocol: 'unix',\n pathname: addr.path,\n })\n : URL.format({\n protocol: addr.proto,\n hostname: addr.host,\n port: addr.port,\n pathname: '/',\n }),\n version: pkgName + '/' + pkgVersion,\n },\n 'http address - @{addr} - @{version}'\n );\n}\n\nexport { startVerdaccio, listenDefaultCallback };\n"],"mappings":"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"}