verdaccio
Version:
A lightweight private npm proxy registry
134 lines (100 loc) • 4.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
var _express = _interopRequireDefault(require("express"));
var _compression = _interopRequireDefault(require("compression"));
var _cors = _interopRequireDefault(require("cors"));
var _storage = _interopRequireDefault(require("../lib/storage"));
var _pluginLoader = _interopRequireDefault(require("../lib/plugin-loader"));
var _debug = _interopRequireDefault(require("./debug"));
var _auth = _interopRequireDefault(require("../lib/auth"));
var _endpoint = _interopRequireDefault(require("./endpoint"));
var _utils = require("../lib/utils");
var _constants = require("../lib/constants");
var _config = _interopRequireDefault(require("../lib/config"));
var _api = _interopRequireDefault(require("./web/api"));
var _web = _interopRequireDefault(require("./web"));
var _logger = require("../lib/logger");
var _middleware = require("./middleware");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @prettier
*
*/
const defineAPI = function (config, storage) {
const auth = new _auth.default(config);
const app = (0, _express.default)(); // run in production mode by default, just in case
// it shouldn't make any difference anyway
app.set('env', process.env.NODE_ENV || 'production');
app.use((0, _cors.default)()); // Router setup
app.use(_middleware.log);
app.use(_middleware.errorReportingMiddleware);
app.use(function (req, res, next) {
res.setHeader('X-Powered-By', config.user_agent);
next();
});
app.use((0, _compression.default)());
app.get('/favicon.ico', function (req, res, next) {
req.url = '/-/static/favicon.png';
next();
}); // Hook for tests only
if (config._debug) {
(0, _debug.default)(app, config.self_path);
} // register middleware plugins
const plugin_params = {
config: config,
logger: _logger.logger
};
const plugins = (0, _pluginLoader.default)(config, config.middlewares, plugin_params, function (plugin) {
return plugin.register_middlewares;
});
plugins.forEach(plugin => {
plugin.register_middlewares(app, auth, storage);
}); // For npm request
app.use((0, _endpoint.default)(config, auth, storage)); // For WebUI & WebUI API
if (_lodash.default.get(config, 'web.enable', true)) {
app.use('/', (0, _web.default)(config, auth, storage));
app.use('/-/verdaccio/', (0, _api.default)(config, auth, storage));
} else {
app.get('/', function (req, res, next) {
next(_utils.ErrorCode.getNotFound(_constants.API_ERROR.WEB_DISABLED));
});
} // Catch 404
app.get('/*', function (req, res, next) {
next(_utils.ErrorCode.getNotFound(_constants.API_ERROR.FILE_NOT_FOUND));
});
app.use(function (err, req, res, next) {
if (_lodash.default.isError(err)) {
if (err.code === 'ECONNABORT' && res.statusCode === _constants.HTTP_STATUS.NOT_MODIFIED) {
return next();
}
if (_lodash.default.isFunction(res.report_error) === false) {
// in case of very early error this middleware may not be loaded before error is generated
// fixing that
(0, _middleware.errorReportingMiddleware)(req, res, _lodash.default.noop);
}
res.report_error(err);
} else {
// Fall to Middleware.final
return next(err);
}
});
app.use(_middleware.final);
return app;
};
var _default = async function _default(configHash) {
(0, _logger.setup)(configHash.logs);
const config = new _config.default(_lodash.default.cloneDeep(configHash)); // register middleware plugins
const plugin_params = {
config: config,
logger: _logger.logger
};
const filters = (0, _pluginLoader.default)(config, config.filters || {}, plugin_params, plugin => plugin.filter_metadata);
const storage = new _storage.default(config); // waits until init calls have been initialized
await storage.init(config, filters);
return defineAPI(config, storage);
};
exports.default = _default;