@verdaccio/canary 6.3.2-canary.404363f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/bin/verdaccio +3 -0
  4. package/bin/verdaccio-canary +3 -0
  5. package/build/api/debug/index.js +28 -0
  6. package/build/api/endpoint/api/dist-tags.js +77 -0
  7. package/build/api/endpoint/api/package.js +103 -0
  8. package/build/api/endpoint/api/ping.js +13 -0
  9. package/build/api/endpoint/api/publish.js +359 -0
  10. package/build/api/endpoint/api/search.js +107 -0
  11. package/build/api/endpoint/api/star.js +73 -0
  12. package/build/api/endpoint/api/stars.js +42 -0
  13. package/build/api/endpoint/api/user.js +84 -0
  14. package/build/api/endpoint/api/v1/profile.js +69 -0
  15. package/build/api/endpoint/api/v1/search.js +181 -0
  16. package/build/api/endpoint/api/v1/token.js +140 -0
  17. package/build/api/endpoint/api/whoami.js +15 -0
  18. package/build/api/endpoint/index.js +58 -0
  19. package/build/api/index.js +105 -0
  20. package/build/api/middleware.js +56 -0
  21. package/build/api/web/api/index.js +31 -0
  22. package/build/api/web/api/package.js +165 -0
  23. package/build/api/web/api/search.js +53 -0
  24. package/build/api/web/api/user.js +70 -0
  25. package/build/api/web/api/utils.js +14 -0
  26. package/build/api/web/html/favicon.ico +0 -0
  27. package/build/api/web/index.js +96 -0
  28. package/build/index.js +76 -0
  29. package/build/lib/auth-utils.js +16 -0
  30. package/build/lib/bootstrap.js +167 -0
  31. package/build/lib/cli/cli.js +26 -0
  32. package/build/lib/cli/commands/info.js +26 -0
  33. package/build/lib/cli/commands/init.js +78 -0
  34. package/build/lib/cli/commands/version.js +17 -0
  35. package/build/lib/cli/utils.js +14 -0
  36. package/build/lib/cli.js +16 -0
  37. package/build/lib/config.js +22 -0
  38. package/build/lib/constants.js +121 -0
  39. package/build/lib/experiments.js +29 -0
  40. package/build/lib/local-storage.js +760 -0
  41. package/build/lib/logger/index.js +21 -0
  42. package/build/lib/metadata-utils.js +39 -0
  43. package/build/lib/run-server.js +122 -0
  44. package/build/lib/storage-utils.js +282 -0
  45. package/build/lib/storage.js +676 -0
  46. package/build/lib/up-storage.js +605 -0
  47. package/build/lib/uplink-util.js +36 -0
  48. package/build/lib/utils.js +265 -0
  49. package/conf/.gitkeep +0 -0
  50. package/index.js +1 -0
  51. package/package.json +156 -0
  52. package/security.txt +5 -0
  53. package/systemd/verdaccio.service +11 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _express = require("express");
8
+ var _lodash = _interopRequireDefault(require("lodash"));
9
+ var _core = require("@verdaccio/core");
10
+ var _middleware = require("@verdaccio/middleware");
11
+ var _authUtils = require("../../../lib/auth-utils");
12
+ var _constants = require("../../../lib/constants");
13
+ var _utils = require("../../../lib/utils");
14
+ var _utils2 = require("./utils");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ function addUserAuthApi(auth, config) {
17
+ /* eslint new-cap:off */
18
+ const route = (0, _express.Router)();
19
+ route.post((0, _utils2.wrapSecPath)(_middleware.WebUrls.user_login), (0, _middleware.rateLimit)(config?.userRateLimit), function (req, res, next) {
20
+ const {
21
+ username,
22
+ password
23
+ } = req.body;
24
+ auth.authenticate(username, password, async (err, user) => {
25
+ if (err) {
26
+ const errorCode = err.message ? _constants.HTTP_STATUS.UNAUTHORIZED : _constants.HTTP_STATUS.INTERNAL_ERROR;
27
+ next(_utils.ErrorCode.getCode(errorCode, err.message));
28
+ } else {
29
+ req.remote_user = user;
30
+ const jWTSignOptions = (0, _authUtils.getSecurity)(config).web.sign;
31
+ res.set(_constants.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
32
+ next({
33
+ token: await auth.jwtEncrypt(user, jWTSignOptions),
34
+ username: req.remote_user.name
35
+ });
36
+ }
37
+ });
38
+ });
39
+ route.put((0, _utils2.wrapSecPath)(_middleware.WebUrls.reset_password), function (req, res, next) {
40
+ if (_lodash.default.isNil(req.remote_user.name)) {
41
+ res.status(_constants.HTTP_STATUS.UNAUTHORIZED);
42
+ return next({
43
+ // FUTURE: update to a more meaningful message
44
+ message: _constants.API_ERROR.MUST_BE_LOGGED
45
+ });
46
+ }
47
+ const {
48
+ password
49
+ } = req.body;
50
+ const {
51
+ name
52
+ } = req.remote_user;
53
+ if (_core.validationUtils.validatePassword(password.new) === false) {
54
+ auth.changePassword(name, password.old, password.new, (err, isUpdated) => {
55
+ if (_lodash.default.isNil(err) && isUpdated) {
56
+ next({
57
+ ok: true
58
+ });
59
+ } else {
60
+ return next(_utils.ErrorCode.getInternalError(_constants.API_ERROR.INTERNAL_SERVER_ERROR));
61
+ }
62
+ });
63
+ } else {
64
+ return next(_utils.ErrorCode.getCode(_constants.HTTP_STATUS.BAD_REQUEST, _constants.APP_ERROR.PASSWORD_VALIDATION));
65
+ }
66
+ });
67
+ return route;
68
+ }
69
+ var _default = exports.default = addUserAuthApi;
70
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb3JlIiwiX21pZGRsZXdhcmUiLCJfYXV0aFV0aWxzIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl91dGlsczIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJhZGRVc2VyQXV0aEFwaSIsImF1dGgiLCJjb25maWciLCJyb3V0ZSIsIlJvdXRlciIsInBvc3QiLCJ3cmFwU2VjUGF0aCIsIldlYlVybHMiLCJ1c2VyX2xvZ2luIiwicmF0ZUxpbWl0IiwidXNlclJhdGVMaW1pdCIsInJlcSIsInJlcyIsIm5leHQiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYm9keSIsImF1dGhlbnRpY2F0ZSIsImVyciIsInVzZXIiLCJlcnJvckNvZGUiLCJtZXNzYWdlIiwiSFRUUF9TVEFUVVMiLCJVTkFVVEhPUklaRUQiLCJJTlRFUk5BTF9FUlJPUiIsIkVycm9yQ29kZSIsImdldENvZGUiLCJyZW1vdGVfdXNlciIsImpXVFNpZ25PcHRpb25zIiwiZ2V0U2VjdXJpdHkiLCJ3ZWIiLCJzaWduIiwic2V0IiwiSEVBREVSUyIsIkNBQ0hFX0NPTlRST0wiLCJ0b2tlbiIsImp3dEVuY3J5cHQiLCJuYW1lIiwicHV0IiwicmVzZXRfcGFzc3dvcmQiLCJfIiwiaXNOaWwiLCJzdGF0dXMiLCJBUElfRVJST1IiLCJNVVNUX0JFX0xPR0dFRCIsInZhbGlkYXRpb25VdGlscyIsInZhbGlkYXRlUGFzc3dvcmQiLCJuZXciLCJjaGFuZ2VQYXNzd29yZCIsIm9sZCIsImlzVXBkYXRlZCIsIm9rIiwiZ2V0SW50ZXJuYWxFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsIkJBRF9SRVFVRVNUIiwiQVBQX0VSUk9SIiwiUEFTU1dPUkRfVkFMSURBVElPTiIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2FwaS91c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHR5cGUgeyBBdXRoIH0gZnJvbSAnQHZlcmRhY2Npby9hdXRoJztcbmltcG9ydCB7IHZhbGlkYXRpb25VdGlscyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBXZWJVcmxzLCByYXRlTGltaXQgfSBmcm9tICdAdmVyZGFjY2lvL21pZGRsZXdhcmUnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcsIEpXVFNpZ25PcHRpb25zLCBSZW1vdGVVc2VyIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IGdldFNlY3VyaXR5IH0gZnJvbSAnLi4vLi4vLi4vbGliL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBBUFBfRVJST1IsIEhFQURFUlMsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi8uLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyAkTmV4dEZ1bmN0aW9uVmVyIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgd3JhcFNlY1BhdGggfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gYWRkVXNlckF1dGhBcGkoYXV0aDogQXV0aCwgY29uZmlnOiBDb25maWcpOiBSb3V0ZXIge1xuICAvKiBlc2xpbnQgbmV3LWNhcDpvZmYgKi9cbiAgY29uc3Qgcm91dGUgPSBSb3V0ZXIoKTtcbiAgcm91dGUucG9zdChcbiAgICB3cmFwU2VjUGF0aChXZWJVcmxzLnVzZXJfbG9naW4pLFxuICAgIHJhdGVMaW1pdChjb25maWc/LnVzZXJSYXRlTGltaXQpLFxuICAgIGZ1bmN0aW9uIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXEuYm9keTtcblxuICAgICAgYXV0aC5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkLCBhc3luYyAoZXJyLCB1c2VyPzogUmVtb3RlVXNlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZXJyLm1lc3NhZ2UgPyBIVFRQX1NUQVRVUy5VTkFVVEhPUklaRUQgOiBIVFRQX1NUQVRVUy5JTlRFUk5BTF9FUlJPUjtcbiAgICAgICAgICBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKGVycm9yQ29kZSwgZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIgPSB1c2VyIGFzIFJlbW90ZVVzZXI7XG4gICAgICAgICAgY29uc3QgaldUU2lnbk9wdGlvbnM6IEpXVFNpZ25PcHRpb25zID0gZ2V0U2VjdXJpdHkoY29uZmlnKS53ZWIuc2lnbjtcbiAgICAgICAgICByZXMuc2V0KEhFQURFUlMuQ0FDSEVfQ09OVFJPTCwgJ25vLWNhY2hlLCBuby1zdG9yZScpO1xuICAgICAgICAgIG5leHQoe1xuICAgICAgICAgICAgdG9rZW46IGF3YWl0IGF1dGguand0RW5jcnlwdCh1c2VyIGFzIFJlbW90ZVVzZXIsIGpXVFNpZ25PcHRpb25zKSxcbiAgICAgICAgICAgIHVzZXJuYW1lOiByZXEucmVtb3RlX3VzZXIubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICApO1xuXG4gIHJvdXRlLnB1dChcbiAgICB3cmFwU2VjUGF0aChXZWJVcmxzLnJlc2V0X3Bhc3N3b3JkKSxcbiAgICBmdW5jdGlvbiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgICBpZiAoXy5pc05pbChyZXEucmVtb3RlX3VzZXIubmFtZSkpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5VTkFVVEhPUklaRUQpO1xuICAgICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgICAgLy8gRlVUVVJFOiB1cGRhdGUgdG8gYSBtb3JlIG1lYW5pbmdmdWwgbWVzc2FnZVxuICAgICAgICAgIG1lc3NhZ2U6IEFQSV9FUlJPUi5NVVNUX0JFX0xPR0dFRCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgcGFzc3dvcmQgfSA9IHJlcS5ib2R5O1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSByZXEucmVtb3RlX3VzZXI7XG5cbiAgICAgIGlmICh2YWxpZGF0aW9uVXRpbHMudmFsaWRhdGVQYXNzd29yZChwYXNzd29yZC5uZXcpID09PSBmYWxzZSkge1xuICAgICAgICBhdXRoLmNoYW5nZVBhc3N3b3JkKG5hbWUgYXMgc3RyaW5nLCBwYXNzd29yZC5vbGQsIHBhc3N3b3JkLm5ldywgKGVyciwgaXNVcGRhdGVkKTogdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSAmJiBpc1VwZGF0ZWQpIHtcbiAgICAgICAgICAgIG5leHQoe1xuICAgICAgICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihBUElfRVJST1IuSU5URVJOQUxfU0VSVkVSX0VSUk9SKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLkJBRF9SRVFVRVNULCBBUFBfRVJST1IuUEFTU1dPUkRfVkFMSURBVElPTikpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICByZXR1cm4gcm91dGU7XG59XG5cbmV4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
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.wrapPath = wrapPath;
7
+ exports.wrapSecPath = wrapSecPath;
8
+ function wrapPath(urlPath) {
9
+ return `/-/verdaccio/data${urlPath}`;
10
+ }
11
+ function wrapSecPath(urlPath) {
12
+ return `/-/verdaccio/sec${urlPath}`;
13
+ }
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3cmFwUGF0aCIsInVybFBhdGgiLCJ3cmFwU2VjUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2FwaS91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gd3JhcFBhdGgodXJsUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiBgLy0vdmVyZGFjY2lvL2RhdGEke3VybFBhdGh9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBTZWNQYXRoKHVybFBhdGg6IHN0cmluZykge1xuICByZXR1cm4gYC8tL3ZlcmRhY2Npby9zZWMke3VybFBhdGh9YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFPLFNBQVNBLFFBQVFBLENBQUNDLE9BQWUsRUFBRTtFQUN4QyxPQUFPLG9CQUFvQkEsT0FBTyxFQUFFO0FBQ3RDO0FBRU8sU0FBU0MsV0FBV0EsQ0FBQ0QsT0FBZSxFQUFFO0VBQzNDLE9BQU8sbUJBQW1CQSxPQUFPLEVBQUU7QUFDckMiLCJpZ25vcmVMaXN0IjpbXX0=
Binary file
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.PLUGIN_UI_PREFIX = exports.DEFAULT_PLUGIN_UI_THEME = void 0;
7
+ exports.loadTheme = loadTheme;
8
+ exports.webAPIMiddleware = webAPIMiddleware;
9
+ exports.webMiddleware = webMiddleware;
10
+ var _debug = _interopRequireDefault(require("debug"));
11
+ var _express = _interopRequireWildcard(require("express"));
12
+ var _lodash = _interopRequireDefault(require("lodash"));
13
+ var _core = require("@verdaccio/core");
14
+ var _loaders = require("@verdaccio/loaders");
15
+ var _logger = require("@verdaccio/logger");
16
+ var _middleware = require("@verdaccio/middleware");
17
+ var _uiTheme = _interopRequireDefault(require("@verdaccio/ui-theme"));
18
+ var _api = _interopRequireDefault(require("./api"));
19
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ const debug = (0, _debug.default)('verdaccio:web');
22
+ const PLUGIN_UI_PREFIX = exports.PLUGIN_UI_PREFIX = 'verdaccio-theme';
23
+ const DEFAULT_PLUGIN_UI_THEME = exports.DEFAULT_PLUGIN_UI_THEME = '@verdaccio/ui-theme';
24
+ async function loadTheme(config) {
25
+ if (_lodash.default.isNil(config.theme) === false) {
26
+ const plugin = await (0, _loaders.asyncLoadPlugin)(config.theme, {
27
+ config,
28
+ logger: _logger.logger
29
+ },
30
+ // TODO: add types { staticPath: string; manifest: unknown; manifestFiles: unknown }
31
+ function (plugin) {
32
+ /**
33
+ *
34
+ - `staticPath`: is the same data returned in Verdaccio 5.
35
+ - `manifest`: A webpack manifest object.
36
+ - `manifestFiles`: A object with one property `js` and the array (order matters) of the manifest id to be loaded in the template dynamically.
37
+ */
38
+ return plugin.staticPath && plugin.manifest && plugin.manifestFiles;
39
+ }, true, config?.serverSettings?.pluginPrefix ?? PLUGIN_UI_PREFIX, _core.PLUGIN_CATEGORY.THEME);
40
+ if (plugin.length > 1) {
41
+ _logger.logger.warn('multiple ui themes are not supported; only the first plugin is used');
42
+ }
43
+ return _lodash.default.head(plugin);
44
+ }
45
+ }
46
+ function webAPIMiddleware(tokenMiddleware, webEndpointsApi) {
47
+ const route = (0, _express.Router)();
48
+ // validate all of these params as a package name
49
+ // this might be too harsh, so ask if it causes trouble=
50
+ route.param('package', _middleware.validatePackage);
51
+ route.param('filename', _middleware.validateName);
52
+ route.param('version', _middleware.validateName);
53
+ route.use(_express.default.urlencoded({
54
+ extended: false
55
+ }));
56
+ route.use(_middleware.setSecurityWebHeaders);
57
+ if (typeof tokenMiddleware === 'function') {
58
+ route.use(tokenMiddleware);
59
+ }
60
+ if (typeof webEndpointsApi === 'function') {
61
+ route.use(webEndpointsApi);
62
+ }
63
+ return route;
64
+ }
65
+ function webMiddleware(config, middlewares, pluginOptions) {
66
+ const router = _express.default.Router();
67
+ const {
68
+ tokenMiddleware,
69
+ webEndpointsApi
70
+ } = middlewares;
71
+ // render web
72
+ router.use(_middleware.WebUrlsNamespace.root, (0, _middleware.renderWebMiddleware)(config, tokenMiddleware, pluginOptions));
73
+ // web endpoints: search, packages, readme, sidebar, etc
74
+ router.use(_middleware.WebUrlsNamespace.endpoints, webAPIMiddleware(tokenMiddleware, webEndpointsApi));
75
+ return router;
76
+ }
77
+ var _default = async (config, auth, storage, logger) => {
78
+ let pluginOptions = await loadTheme(config);
79
+ if (!pluginOptions) {
80
+ debug('no theme plugin found, using default theme');
81
+ pluginOptions = (0, _uiTheme.default)(config.web);
82
+ logger.info({
83
+ name: DEFAULT_PLUGIN_UI_THEME,
84
+ pluginCategory: _core.PLUGIN_CATEGORY.THEME
85
+ }, 'plugin @{name} successfully loaded (@{pluginCategory})');
86
+ }
87
+ const router = (0, _express.Router)();
88
+ // web endpoints, search, packages, etc
89
+ router.use(webMiddleware(config, {
90
+ tokenMiddleware: auth.webUIJWTmiddleware(),
91
+ webEndpointsApi: (0, _api.default)(auth, storage, config)
92
+ }, pluginOptions));
93
+ return router;
94
+ };
95
+ exports.default = _default;
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9leHByZXNzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbG9kYXNoIiwiX2NvcmUiLCJfbG9hZGVycyIsIl9sb2dnZXIiLCJfbWlkZGxld2FyZSIsIl91aVRoZW1lIiwiX2FwaSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImRlYnVnIiwiYnVpbGREZWJ1ZyIsIlBMVUdJTl9VSV9QUkVGSVgiLCJleHBvcnRzIiwiREVGQVVMVF9QTFVHSU5fVUlfVEhFTUUiLCJsb2FkVGhlbWUiLCJjb25maWciLCJfIiwiaXNOaWwiLCJ0aGVtZSIsInBsdWdpbiIsImFzeW5jTG9hZFBsdWdpbiIsImxvZ2dlciIsInN0YXRpY1BhdGgiLCJtYW5pZmVzdCIsIm1hbmlmZXN0RmlsZXMiLCJzZXJ2ZXJTZXR0aW5ncyIsInBsdWdpblByZWZpeCIsIlBMVUdJTl9DQVRFR09SWSIsIlRIRU1FIiwibGVuZ3RoIiwid2FybiIsImhlYWQiLCJ3ZWJBUElNaWRkbGV3YXJlIiwidG9rZW5NaWRkbGV3YXJlIiwid2ViRW5kcG9pbnRzQXBpIiwicm91dGUiLCJSb3V0ZXIiLCJwYXJhbSIsInZhbGlkYXRlUGFja2FnZSIsInZhbGlkYXRlTmFtZSIsInVzZSIsImV4cHJlc3MiLCJ1cmxlbmNvZGVkIiwiZXh0ZW5kZWQiLCJzZXRTZWN1cml0eVdlYkhlYWRlcnMiLCJ3ZWJNaWRkbGV3YXJlIiwibWlkZGxld2FyZXMiLCJwbHVnaW5PcHRpb25zIiwicm91dGVyIiwiV2ViVXJsc05hbWVzcGFjZSIsInJvb3QiLCJyZW5kZXJXZWJNaWRkbGV3YXJlIiwiZW5kcG9pbnRzIiwiX2RlZmF1bHQiLCJhdXRoIiwic3RvcmFnZSIsImRlZmF1bHRUaGVtZSIsIndlYiIsImluZm8iLCJuYW1lIiwicGx1Z2luQ2F0ZWdvcnkiLCJ3ZWJVSUpXVG1pZGRsZXdhcmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3dlYi9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgZXhwcmVzcywgeyBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IFBMVUdJTl9DQVRFR09SWSB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBhc3luY0xvYWRQbHVnaW4gfSBmcm9tICdAdmVyZGFjY2lvL2xvYWRlcnMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHZlcmRhY2Npby9sb2dnZXInO1xuaW1wb3J0IHtcbiAgV2ViVXJsc05hbWVzcGFjZSxcbiAgcmVuZGVyV2ViTWlkZGxld2FyZSxcbiAgc2V0U2VjdXJpdHlXZWJIZWFkZXJzLFxuICB2YWxpZGF0ZU5hbWUsXG4gIHZhbGlkYXRlUGFja2FnZSxcbn0gZnJvbSAnQHZlcmRhY2Npby9taWRkbGV3YXJlJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnQHZlcmRhY2Npby91aS10aGVtZSc7XG5cbmltcG9ydCB3ZWJFbmRwb2ludHNBcGkgZnJvbSAnLi9hcGknO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2Npbzp3ZWInKTtcbmV4cG9ydCBjb25zdCBQTFVHSU5fVUlfUFJFRklYID0gJ3ZlcmRhY2Npby10aGVtZSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QTFVHSU5fVUlfVEhFTUUgPSAnQHZlcmRhY2Npby91aS10aGVtZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVGhlbWUoY29uZmlnOiBhbnkpIHtcbiAgaWYgKF8uaXNOaWwoY29uZmlnLnRoZW1lKSA9PT0gZmFsc2UpIHtcbiAgICBjb25zdCBwbHVnaW4gPSBhd2FpdCBhc3luY0xvYWRQbHVnaW4oXG4gICAgICBjb25maWcudGhlbWUsXG4gICAgICB7IGNvbmZpZywgbG9nZ2VyIH0sXG4gICAgICAvLyBUT0RPOiBhZGQgdHlwZXMgeyBzdGF0aWNQYXRoOiBzdHJpbmc7IG1hbmlmZXN0OiB1bmtub3duOyBtYW5pZmVzdEZpbGVzOiB1bmtub3duIH1cbiAgICAgIGZ1bmN0aW9uIChwbHVnaW46IGFueSkge1xuICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAtIGBzdGF0aWNQYXRoYDogaXMgdGhlIHNhbWUgZGF0YSByZXR1cm5lZCBpbiBWZXJkYWNjaW8gNS5cbiAgICAgICAgICAgICAgICAgLSBgbWFuaWZlc3RgOiBBIHdlYnBhY2sgbWFuaWZlc3Qgb2JqZWN0LlxuICAgICAgICAgICAgICAgICAtIGBtYW5pZmVzdEZpbGVzYDogQSBvYmplY3Qgd2l0aCBvbmUgcHJvcGVydHkgYGpzYCBhbmQgdGhlIGFycmF5IChvcmRlciBtYXR0ZXJzKSBvZiB0aGUgbWFuaWZlc3QgaWQgdG8gYmUgbG9hZGVkIGluIHRoZSB0ZW1wbGF0ZSBkeW5hbWljYWxseS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHBsdWdpbi5zdGF0aWNQYXRoICYmIHBsdWdpbi5tYW5pZmVzdCAmJiBwbHVnaW4ubWFuaWZlc3RGaWxlcztcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgICAgY29uZmlnPy5zZXJ2ZXJTZXR0aW5ncz8ucGx1Z2luUHJlZml4ID8/IFBMVUdJTl9VSV9QUkVGSVgsXG4gICAgICBQTFVHSU5fQ0FURUdPUlkuVEhFTUVcbiAgICApO1xuICAgIGlmIChwbHVnaW4ubGVuZ3RoID4gMSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ211bHRpcGxlIHVpIHRoZW1lcyBhcmUgbm90IHN1cHBvcnRlZDsgb25seSB0aGUgZmlyc3QgcGx1Z2luIGlzIHVzZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXy5oZWFkKHBsdWdpbik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlYkFQSU1pZGRsZXdhcmUoXG4gIHRva2VuTWlkZGxld2FyZTogUmVxdWVzdEhhbmRsZXIsXG4gIHdlYkVuZHBvaW50c0FwaTogUmVxdWVzdEhhbmRsZXJcbik6IFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlID0gUm91dGVyKCk7XG4gIC8vIHZhbGlkYXRlIGFsbCBvZiB0aGVzZSBwYXJhbXMgYXMgYSBwYWNrYWdlIG5hbWVcbiAgLy8gdGhpcyBtaWdodCBiZSB0b28gaGFyc2gsIHNvIGFzayBpZiBpdCBjYXVzZXMgdHJvdWJsZT1cbiAgcm91dGUucGFyYW0oJ3BhY2thZ2UnLCB2YWxpZGF0ZVBhY2thZ2UpO1xuICByb3V0ZS5wYXJhbSgnZmlsZW5hbWUnLCB2YWxpZGF0ZU5hbWUpO1xuICByb3V0ZS5wYXJhbSgndmVyc2lvbicsIHZhbGlkYXRlTmFtZSk7XG4gIHJvdXRlLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBleHRlbmRlZDogZmFsc2UgfSkpO1xuICByb3V0ZS51c2Uoc2V0U2VjdXJpdHlXZWJIZWFkZXJzKTtcblxuICBpZiAodHlwZW9mIHRva2VuTWlkZGxld2FyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJvdXRlLnVzZSh0b2tlbk1pZGRsZXdhcmUpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB3ZWJFbmRwb2ludHNBcGkgPT09ICdmdW5jdGlvbicpIHtcbiAgICByb3V0ZS51c2Uod2ViRW5kcG9pbnRzQXBpKTtcbiAgfVxuXG4gIHJldHVybiByb3V0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlYk1pZGRsZXdhcmUoY29uZmlnLCBtaWRkbGV3YXJlcywgcGx1Z2luT3B0aW9ucyk6IGFueSB7XG4gIGNvbnN0IHJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG4gIGNvbnN0IHsgdG9rZW5NaWRkbGV3YXJlLCB3ZWJFbmRwb2ludHNBcGkgfSA9IG1pZGRsZXdhcmVzO1xuICAvLyByZW5kZXIgd2ViXG4gIHJvdXRlci51c2UoV2ViVXJsc05hbWVzcGFjZS5yb290LCByZW5kZXJXZWJNaWRkbGV3YXJlKGNvbmZpZywgdG9rZW5NaWRkbGV3YXJlLCBwbHVnaW5PcHRpb25zKSk7XG4gIC8vIHdlYiBlbmRwb2ludHM6IHNlYXJjaCwgcGFja2FnZXMsIHJlYWRtZSwgc2lkZWJhciwgZXRjXG4gIHJvdXRlci51c2UoV2ViVXJsc05hbWVzcGFjZS5lbmRwb2ludHMsIHdlYkFQSU1pZGRsZXdhcmUodG9rZW5NaWRkbGV3YXJlLCB3ZWJFbmRwb2ludHNBcGkpKTtcbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKGNvbmZpZywgYXV0aCwgc3RvcmFnZSwgbG9nZ2VyKSA9PiB7XG4gIGxldCBwbHVnaW5PcHRpb25zID0gYXdhaXQgbG9hZFRoZW1lKGNvbmZpZyk7XG4gIGlmICghcGx1Z2luT3B0aW9ucykge1xuICAgIGRlYnVnKCdubyB0aGVtZSBwbHVnaW4gZm91bmQsIHVzaW5nIGRlZmF1bHQgdGhlbWUnKTtcbiAgICBwbHVnaW5PcHRpb25zID0gZGVmYXVsdFRoZW1lKGNvbmZpZy53ZWIpO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgeyBuYW1lOiBERUZBVUxUX1BMVUdJTl9VSV9USEVNRSwgcGx1Z2luQ2F0ZWdvcnk6IFBMVUdJTl9DQVRFR09SWS5USEVNRSB9LFxuICAgICAgJ3BsdWdpbiBAe25hbWV9IHN1Y2Nlc3NmdWxseSBsb2FkZWQgKEB7cGx1Z2luQ2F0ZWdvcnl9KSdcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG4gIC8vIHdlYiBlbmRwb2ludHMsIHNlYXJjaCwgcGFja2FnZXMsIGV0Y1xuICByb3V0ZXIudXNlKFxuICAgIHdlYk1pZGRsZXdhcmUoXG4gICAgICBjb25maWcsXG4gICAgICB7XG4gICAgICAgIHRva2VuTWlkZGxld2FyZTogYXV0aC53ZWJVSUpXVG1pZGRsZXdhcmUoKSxcbiAgICAgICAgd2ViRW5kcG9pbnRzQXBpOiB3ZWJFbmRwb2ludHNBcGkoYXV0aCwgc3RvcmFnZSwgY29uZmlnKSxcbiAgICAgIH0sXG4gICAgICBwbHVnaW5PcHRpb25zXG4gICAgKVxuICApO1xuICByZXR1cm4gcm91dGVyO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsUUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUCxPQUFBO0FBT0EsSUFBQVEsUUFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQVMsSUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQW9DLFNBQUFFLHdCQUFBUSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBVix1QkFBQSxZQUFBQSxDQUFBUSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdB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QUM5QixNQUFNLEVBQUUrQixXQUFXLEVBQUVDLGFBQWEsRUFBTztFQUNyRSxNQUFNQyxNQUFNLEdBQUdQLGdCQUFPLENBQUNMLE1BQU0sQ0FBQyxDQUFDO0VBQy9CLE1BQU07SUFBRUgsZUFBZTtJQUFFQztFQUFnQixDQUFDLEdBQUdZLFdBQVc7RUFDeEQ7RUFDQUUsTUFBTSxDQUFDUixHQUFHLENBQUNTLDRCQUFnQixDQUFDQyxJQUFJLEVBQUUsSUFBQUMsK0JBQW1CLEVBQUNwQyxNQUFNLEVBQUVrQixlQUFlLEVBQUVjLGFBQWEsQ0FBQyxDQUFDO0VBQzlGO0VBQ0FDLE1BQU0sQ0FBQ1IsR0FBRyxDQUFDUyw0QkFBZ0IsQ0FBQ0csU0FBUyxFQUFFcEIsZ0JBQWdCLENBQUNDLGVBQWUsRUFBRUMsZUFBZSxDQUFDLENBQUM7RUFDMUYsT0FBT2MsTUFBTTtBQUNmO0FBQUMsSUFBQUssUUFBQSxHQUVjLE1BQUFBLENBQU90QyxNQUFNLEVBQUV1QyxJQUFJLEVBQUVDLE9BQU8sRUFBRWxDLE1BQU0sS0FBSztFQUN0RCxJQUFJMEIsYUFBYSxHQUFHLE1BQU1qQyxTQUFTLENBQUNDLE1BQU0sQ0FBQztFQUMzQyxJQUFJLENBQUNnQyxhQUFhLEVBQUU7SUFDbEJ0QyxLQUFLLENBQUMsNENBQTRDLENBQUM7SUFDbkRzQyxhQUFhLEdBQUcsSUFBQVMsZ0JBQVksRUFBQ3pDLE1BQU0sQ0FBQzBDLEdBQUcsQ0FBQztJQUN4Q3BDLE1BQU0sQ0FBQ3FDLElBQUksQ0FDVDtNQUFFQyxJQUFJLEVBQUU5Qyx1QkFBdUI7TUFBRStDLGNBQWMsRUFBRWpDLHFCQUFlLENBQUNDO0lBQU0sQ0FBQyxFQUN4RSx3REFDRixDQUFDO0VBQ0g7RUFFQSxNQUFNb0IsTUFBTSxHQUFHLElBQUFaLGVBQU0sRUFBQyxDQUFDO0VBQ3ZCO0VBQ0FZLE1BQU0sQ0FBQ1IsR0FBRyxDQUNSSyxhQUFhLENBQ1g5QixNQUFNLEVBQ047SUFDRWtCLGVBQWUsRUFBRXFCLElBQUksQ0FBQ08sa0JBQWtCLENBQUMsQ0FBQztJQUMxQzNCLGVBQWUsRUFBRSxJQUFBQSxZQUFlLEVBQUNvQixJQUFJLEVBQUVDLE9BQU8sRUFBRXhDLE1BQU07RUFDeEQsQ0FBQyxFQUNEZ0MsYUFDRixDQUNGLENBQUM7RUFDRCxPQUFPQyxNQUFNO0FBQ2YsQ0FBQztBQUFBcEMsT0FBQSxDQUFBWixPQUFBLEdBQUFxRCxRQUFBIiwiaWdub3JlTGlzdCI6W119
package/build/index.js ADDED
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Config", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _config.Config;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ConfigBuilder", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _config.ConfigBuilder;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "cryptoUtils", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _core.cryptoUtils;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "default", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _bootstrap.startVerdaccio;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "errorUtils", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _core.errorUtils;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "fileUtils", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _core.fileUtils;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "getDefaultConfig", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _config.getDefaultConfig;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "parseConfigFile", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _config.parseConfigFile;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "pkgUtils", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _core.pkgUtils;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "runServer", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _runServer.runServer;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "startVerdaccio", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _bootstrap.startVerdaccio;
70
+ }
71
+ });
72
+ var _bootstrap = require("./lib/bootstrap");
73
+ var _runServer = require("./lib/run-server");
74
+ var _config = require("@verdaccio/config");
75
+ var _core = require("@verdaccio/core");
76
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm9vdHN0cmFwIiwicmVxdWlyZSIsIl9ydW5TZXJ2ZXIiLCJfY29uZmlnIiwiX2NvcmUiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgc3RhcnRWZXJkYWNjaW8gYXMgZGVmYXVsdCwgc3RhcnRWZXJkYWNjaW8gfSBmcm9tICcuL2xpYi9ib290c3RyYXAnO1xuZXhwb3J0IHsgcnVuU2VydmVyIH0gZnJvbSAnLi9saWIvcnVuLXNlcnZlcic7XG5leHBvcnQgeyBDb25maWdCdWlsZGVyLCBwYXJzZUNvbmZpZ0ZpbGUsIGdldERlZmF1bHRDb25maWcsIENvbmZpZyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29uZmlnJztcbmV4cG9ydCB7IGZpbGVVdGlscywgZXJyb3JVdGlscywgY3J5cHRvVXRpbHMsIHBrZ1V0aWxzIH0gZnJvbSAnQHZlcmRhY2Npby9jb3JlJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFILE9BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSecurity = getSecurity;
7
+ var _lodash = _interopRequireDefault(require("lodash"));
8
+ var _config = require("@verdaccio/config");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function getSecurity(config) {
11
+ if (_lodash.default.isNil(config.security) === false) {
12
+ return _lodash.default.merge(_config.defaultSecurity, config.security);
13
+ }
14
+ return _config.defaultSecurity;
15
+ }
16
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uZmlnIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZ2V0U2VjdXJpdHkiLCJjb25maWciLCJfIiwiaXNOaWwiLCJzZWN1cml0eSIsIm1lcmdlIiwiZGVmYXVsdFNlY3VyaXR5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hdXRoLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGRlZmF1bHRTZWN1cml0eSB9IGZyb20gJ0B2ZXJkYWNjaW8vY29uZmlnJztcbmltcG9ydCB7IENvbmZpZywgU2VjdXJpdHkgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3VyaXR5KGNvbmZpZzogQ29uZmlnKTogU2VjdXJpdHkge1xuICBpZiAoXy5pc05pbChjb25maWcuc2VjdXJpdHkpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBfLm1lcmdlKGRlZmF1bHRTZWN1cml0eSwgY29uZmlnLnNlY3VyaXR5KTtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0U2VjdXJpdHk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUFvRCxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUc3QyxTQUFTRyxXQUFXQSxDQUFDQyxNQUFjLEVBQVk7RUFDcEQsSUFBSUMsZUFBQyxDQUFDQyxLQUFLLENBQUNGLE1BQU0sQ0FBQ0csUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFO0lBQ3RDLE9BQU9GLGVBQUMsQ0FBQ0csS0FBSyxDQUFDQyx1QkFBZSxFQUFFTCxNQUFNLENBQUNHLFFBQVEsQ0FBQztFQUNsRDtFQUVBLE9BQU9FLHVCQUFlO0FBQ3hCIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.listenDefaultCallback = listenDefaultCallback;
7
+ exports.startVerdaccio = startVerdaccio;
8
+ var _console = require("console");
9
+ var _constants = _interopRequireDefault(require("constants"));
10
+ var _fs = _interopRequireDefault(require("fs"));
11
+ var _http = _interopRequireDefault(require("http"));
12
+ var _https = _interopRequireDefault(require("https"));
13
+ var _lodash = require("lodash");
14
+ var _url = _interopRequireDefault(require("url"));
15
+ var _config = require("@verdaccio/config");
16
+ var _index = _interopRequireDefault(require("../api/index"));
17
+ var _constants2 = require("./constants");
18
+ var _experiments = require("./experiments");
19
+ var _logger = require("./logger");
20
+ var _utils = require("./utils");
21
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
+ /**
23
+ * Trigger the server after configuration has been loaded.
24
+ * @param {Object} config
25
+ * @param {Object} cliArguments
26
+ * @param {String} configPath
27
+ * @param {String} pkgVersion
28
+ * @param {String} pkgName
29
+ * @deprecated use runServer instead
30
+ */
31
+ function startVerdaccio(config, cliListen, configPath, pkgVersion, pkgName, callback) {
32
+ if ((0, _lodash.isObject)(config) === false) {
33
+ throw new Error(_constants2.API_ERROR.CONFIG_BAD_FORMAT);
34
+ }
35
+ (0, _utils.initLogger)(config);
36
+
37
+ // merge flags and experiments for backward compatibility
38
+ const flags = {
39
+ ...(config?.flags || {}),
40
+ ...(config?.experiments || {})
41
+ };
42
+ (0, _experiments.displayExperimentsInfoBox)(flags);
43
+ _logger.logger.warn('This is a deprecated method, please use runServer instead');
44
+ (0, _index.default)(config).then(app => {
45
+ const listen = cliListen ?? config?.listen;
46
+ const addr = (0, _config.getListenAddress)(listen, _logger.logger);
47
+ let webServer;
48
+ if (addr.proto === 'https') {
49
+ webServer = handleHTTPS(app, configPath, config);
50
+ } else {
51
+ // http
52
+ webServer = _http.default.createServer(app);
53
+ }
54
+ if (webServer && typeof config?.server?.keepAliveTimeout === 'number') {
55
+ // library definition for node is not up to date (doesn't contain recent 8.0 changes)
56
+ webServer.keepAliveTimeout = config.server.keepAliveTimeout * 1000;
57
+ }
58
+ unlinkAddressPath(addr);
59
+ callback(webServer, addr, pkgName, pkgVersion);
60
+ });
61
+ }
62
+ function unlinkAddressPath(addr) {
63
+ if (addr.path && _fs.default.existsSync(addr.path)) {
64
+ _fs.default.unlinkSync(addr.path);
65
+ }
66
+ }
67
+ function handleHTTPS(app, configPath, config) {
68
+ try {
69
+ let httpsOptions = {
70
+ secureOptions: _constants.default.SSL_OP_NO_SSLv2 | _constants.default.SSL_OP_NO_SSLv3 // disable insecure SSLv2 and SSLv3
71
+ };
72
+ const keyCertConfig = config.https;
73
+ const pfxConfig = config.https;
74
+ const missingKeyCert = !(keyCertConfig.key && keyCertConfig.cert);
75
+ (0, _console.debug)('missingKeyCert', missingKeyCert);
76
+ const missingPfx = !pfxConfig.pfx;
77
+ (0, _console.debug)('missingPfx', missingPfx);
78
+ if (missingKeyCert && missingPfx) {
79
+ (0, _console.debug)('No HTTPS configuration found');
80
+ (0, _utils.logHTTPSWarning)(configPath);
81
+ throw new Error('No HTTPS configuration found');
82
+ }
83
+ (0, _console.debug)('HTTPS configuration found');
84
+ if (pfxConfig.pfx) {
85
+ (0, _console.debug)('Using PFX configuration');
86
+ const {
87
+ pfx,
88
+ passphrase
89
+ } = pfxConfig;
90
+ httpsOptions = (0, _lodash.assign)(httpsOptions, {
91
+ pfx: _fs.default.readFileSync(pfx),
92
+ passphrase: passphrase || ''
93
+ });
94
+ } else {
95
+ (0, _console.debug)('Using Key/Cert configuration');
96
+ const {
97
+ key,
98
+ cert,
99
+ ca
100
+ } = keyCertConfig;
101
+ httpsOptions = (0, _lodash.assign)(httpsOptions, {
102
+ key: _fs.default.readFileSync(key),
103
+ cert: _fs.default.readFileSync(cert),
104
+ ...(ca && {
105
+ ca: _fs.default.readFileSync(ca)
106
+ })
107
+ });
108
+ }
109
+ return _https.default.createServer(httpsOptions, app);
110
+ } catch (err) {
111
+ // catch errors related to certificate loading
112
+ _logger.logger.fatal({
113
+ err: err
114
+ }, 'cannot create https server: @{err.message}');
115
+ process.exit(2);
116
+ }
117
+ }
118
+ /**
119
+ *
120
+ * @param webServer
121
+ * @param addr
122
+ * @param pkgName
123
+ * @param pkgVersion
124
+ * @deprecated use initServer instead
125
+ */
126
+ function listenDefaultCallback(webServer, addr, pkgName, pkgVersion) {
127
+ const server = webServer.listen(addr.port || addr.path, addr.host, () => {
128
+ // send a message for tests
129
+ if ((0, _lodash.isFunction)(process.send)) {
130
+ process.send({
131
+ verdaccio_started: true
132
+ });
133
+ }
134
+ }).on('error', function (err) {
135
+ _logger.logger.fatal({
136
+ err: err
137
+ }, 'cannot create http server: @{err.message}');
138
+ process.exit(2);
139
+ });
140
+ function handleShutdownGracefully() {
141
+ _logger.logger.fatal('received shutdown signal - closing server gracefully...');
142
+ server.close(() => {
143
+ _logger.logger.info('server closed.');
144
+ process.exit(0);
145
+ });
146
+ }
147
+
148
+ // handle shutdown signals nicely when environment says so
149
+ if (process.env.VERDACCIO_HANDLE_KILL_SIGNALS === 'true') {
150
+ process.on('SIGINT', handleShutdownGracefully);
151
+ process.on('SIGTERM', handleShutdownGracefully);
152
+ process.on('SIGHUP', handleShutdownGracefully);
153
+ }
154
+ _logger.logger.warn({
155
+ addr: addr.path ? _url.default.format({
156
+ protocol: 'unix',
157
+ pathname: addr.path
158
+ }) : _url.default.format({
159
+ protocol: addr.proto,
160
+ hostname: addr.host,
161
+ port: addr.port,
162
+ pathname: '/'
163
+ }),
164
+ version: pkgName + '/' + pkgVersion
165
+ }, 'http address - @{addr} - @{version}');
166
+ }
167
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9mcyIsIl9odHRwIiwiX2h0dHBzIiwiX2xvZGFzaCIsIl91cmwiLCJfY29uZmlnIiwiX2luZGV4IiwiX2NvbnN0YW50czIiLCJfZXhwZXJpbWVudHMiLCJfbG9nZ2VyIiwiX3V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwic3RhcnRWZXJkYWNjaW8iLCJjb25maWciLCJjbGlMaXN0ZW4iLCJjb25maWdQYXRoIiwicGtnVmVyc2lvbiIsInBrZ05hbWUiLCJjYWxsYmFjayIsImlzT2JqZWN0IiwiRXJyb3IiLCJBUElfRVJST1IiLCJDT05GSUdfQkFEX0ZPUk1BVCIsImluaXRMb2dnZXIiLCJmbGFncyIsImV4cGVyaW1lbnRzIiwiZGlzcGxheUV4cGVyaW1lbnRzSW5mb0JveCIsImxvZ2dlciIsIndhcm4iLCJlbmRQb2ludEFQSSIsInRoZW4iLCJhcHAiLCJsaXN0ZW4iLCJhZGRyIiwiZ2V0TGlzdGVuQWRkcmVzcyIsIndlYlNlcnZlciIsInByb3RvIiwiaGFuZGxlSFRUUFMiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwic2VydmVyIiwia2VlcEFsaXZlVGltZW91dCIsInVubGlua0FkZHJlc3NQYXRoIiwicGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInVubGlua1N5bmMiLCJodHRwc09wdGlvbnMiLCJzZWN1cmVPcHRpb25zIiwiY29uc3RhbnRzIiwiU1NMX09QX05PX1NTTHYyIiwiU1NMX09QX05PX1NTTHYzIiwia2V5Q2VydENvbmZpZyIsImh0dHBzIiwicGZ4Q29uZmlnIiwibWlzc2luZ0tleUNlcnQiLCJrZXkiLCJjZXJ0IiwiZGVidWciLCJtaXNzaW5nUGZ4IiwicGZ4IiwibG9nSFRUUFNXYXJuaW5nIiwicGFzc3BocmFzZSIsImFzc2lnbiIsInJlYWRGaWxlU3luYyIsImNhIiwiZXJyIiwiZmF0YWwiLCJwcm9jZXNzIiwiZXhpdCIsImxpc3RlbkRlZmF1bHRDYWxsYmFjayIsInBvcnQiLCJob3N0IiwiaXNGdW5jdGlvbiIsInNlbmQiLCJ2ZXJkYWNjaW9fc3RhcnRlZCIsIm9uIiwiaGFuZGxlU2h1dGRvd25HcmFjZWZ1bGx5IiwiY2xvc2UiLCJpbmZvIiwiZW52IiwiVkVSREFDQ0lPX0hBTkRMRV9LSUxMX1NJR05BTFMiLCJVUkwiLCJmb3JtYXQiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwiaG9zdG5hbWUiLCJ2ZXJzaW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9ib290c3RyYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVidWcgfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnY29uc3RhbnRzJztcbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgeyBhc3NpZ24sIGlzRnVuY3Rpb24sIGlzT2JqZWN0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcblxuaW1wb3J0IHsgZ2V0TGlzdGVuQWRkcmVzcyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29uZmlnJztcbmltcG9ydCB7IENhbGxiYWNrLCBDb25maWdZYW1sLCBIdHRwc0NvbmZLZXlDZXJ0LCBIdHRwc0NvbmZQZnggfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IGVuZFBvaW50QVBJIGZyb20gJy4uL2FwaS9pbmRleCc7XG5pbXBvcnQgeyBBUElfRVJST1IgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBkaXNwbGF5RXhwZXJpbWVudHNJbmZvQm94IH0gZnJvbSAnLi9leHBlcmltZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBpbml0TG9nZ2VyLCBsb2dIVFRQU1dhcm5pbmcgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBUcmlnZ2VyIHRoZSBzZXJ2ZXIgYWZ0ZXIgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBsb2FkZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge09iamVjdH0gY2xpQXJndW1lbnRzXG4gKiBAcGFyYW0ge1N0cmluZ30gY29uZmlnUGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHBrZ1ZlcnNpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBwa2dOYW1lXG4gKiBAZGVwcmVjYXRlZCB1c2UgcnVuU2VydmVyIGluc3RlYWRcbiAqL1xuZnVuY3Rpb24gc3RhcnRWZXJkYWNjaW8oXG4gIGNvbmZpZzogQ29uZmlnWWFtbCxcbiAgY2xpTGlzdGVuOiBzdHJpbmcsXG4gIGNvbmZpZ1BhdGg6IHN0cmluZyxcbiAgcGtnVmVyc2lvbjogc3RyaW5nLFxuICBwa2dOYW1lOiBzdHJpbmcsXG4gIGNhbGxiYWNrOiBDYWxsYmFja1xuKTogdm9pZCB7XG4gIGlmIChpc09iamVjdChjb25maWcpID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihBUElfRVJST1IuQ09ORklHX0JBRF9GT1JNQVQpO1xuICB9XG5cbiAgaW5pdExvZ2dlcihjb25maWcpO1xuXG4gIC8vIG1lcmdlIGZsYWdzIGFuZCBleHBlcmltZW50cyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBjb25zdCBmbGFncyA9IHtcbiAgICAuLi4oY29uZmlnPy5mbGFncyB8fCB7fSksXG4gICAgLi4uKGNvbmZpZz8uZXhwZXJpbWVudHMgfHwge30pLFxuICB9O1xuICBkaXNwbGF5RXhwZXJpbWVudHNJbmZvQm94KGZsYWdzKTtcbiAgbG9nZ2VyLndhcm4oJ1RoaXMgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCwgcGxlYXNlIHVzZSBydW5TZXJ2ZXIgaW5zdGVhZCcpO1xuXG4gIGVuZFBvaW50QVBJKGNvbmZpZykudGhlbigoYXBwKTogdm9pZCA9PiB7XG4gICAgY29uc3QgbGlzdGVuID0gY2xpTGlzdGVuID8/IGNvbmZpZz8ubGlzdGVuO1xuICAgIGNvbnN0IGFkZHIgPSBnZXRMaXN0ZW5BZGRyZXNzKGxpc3RlbiwgbG9nZ2VyKTtcbiAgICBsZXQgd2ViU2VydmVyO1xuICAgIGlmIChhZGRyLnByb3RvID09PSAnaHR0cHMnKSB7XG4gICAgICB3ZWJTZXJ2ZXIgPSBoYW5kbGVIVFRQUyhhcHAsIGNvbmZpZ1BhdGgsIGNvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGh0dHBcbiAgICAgIHdlYlNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFwcCk7XG4gICAgfVxuICAgIGlmICh3ZWJTZXJ2ZXIgJiYgdHlwZW9mIGNvbmZpZz8uc2VydmVyPy5rZWVwQWxpdmVUaW1lb3V0ID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gbGlicmFyeSBkZWZpbml0aW9uIGZvciBub2RlIGlzIG5vdCB1cCB0byBkYXRlIChkb2Vzbid0IGNvbnRhaW4gcmVjZW50IDguMCBjaGFuZ2VzKVxuICAgICAgd2ViU2VydmVyLmtlZXBBbGl2ZVRpbWVvdXQgPSBjb25maWcuc2VydmVyLmtlZXBBbGl2ZVRpbWVvdXQgKiAxMDAwO1xuICAgIH1cbiAgICB1bmxpbmtBZGRyZXNzUGF0aChhZGRyKTtcbiAgICBjYWxsYmFjayh3ZWJTZXJ2ZXIsIGFkZHIsIHBrZ05hbWUsIHBrZ1ZlcnNpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5saW5rQWRkcmVzc1BhdGgoYWRkcikge1xuICBpZiAoYWRkci5wYXRoICYmIGZzLmV4aXN0c1N5bmMoYWRkci5wYXRoKSkge1xuICAgIGZzLnVubGlua1N5bmMoYWRkci5wYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVIVFRQUyhcbiAgYXBwOiBleHByZXNzLkFwcGxpY2F0aW9uLFxuICBjb25maWdQYXRoOiBzdHJpbmcsXG4gIGNvbmZpZzogQ29uZmlnWWFtbFxuKTogaHR0cHMuU2VydmVyIHtcbiAgdHJ5IHtcbiAgICBsZXQgaHR0cHNPcHRpb25zID0ge1xuICAgICAgc2VjdXJlT3B0aW9uczogY29uc3RhbnRzLlNTTF9PUF9OT19TU0x2MiB8IGNvbnN0YW50cy5TU0xfT1BfTk9fU1NMdjMsIC8vIGRpc2FibGUgaW5zZWN1cmUgU1NMdjIgYW5kIFNTTHYzXG4gICAgfTtcbiAgICBjb25zdCBrZXlDZXJ0Q29uZmlnID0gY29uZmlnLmh0dHBzIGFzIEh0dHBzQ29uZktleUNlcnQ7XG4gICAgY29uc3QgcGZ4Q29uZmlnID0gY29uZmlnLmh0dHBzIGFzIEh0dHBzQ29uZlBmeDtcblxuICAgIGNvbnN0IG1pc3NpbmdLZXlDZXJ0ID0gIShrZXlDZXJ0Q29uZmlnLmtleSAmJiBrZXlDZXJ0Q29uZmlnLmNlcnQpO1xuICAgIGRlYnVnKCdtaXNzaW5nS2V5Q2VydCcsIG1pc3NpbmdLZXlDZXJ0KTtcbiAgICBjb25zdCBtaXNzaW5nUGZ4ID0gIXBmeENvbmZpZy5wZng7XG4gICAgZGVidWcoJ21pc3NpbmdQZngnLCBtaXNzaW5nUGZ4KTtcblxuICAgIGlmIChtaXNzaW5nS2V5Q2VydCAmJiBtaXNzaW5nUGZ4KSB7XG4gICAgICBkZWJ1ZygnTm8gSFRUUFMgY29uZmlndXJhdGlvbiBmb3VuZCcpO1xuICAgICAgbG9nSFRUUFNXYXJuaW5nKGNvbmZpZ1BhdGgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBIVFRQUyBjb25maWd1cmF0aW9uIGZvdW5kJyk7XG4gICAgfVxuXG4gICAgZGVidWcoJ0hUVFBTIGNvbmZpZ3VyYXRpb24gZm91bmQnKTtcbiAgICBpZiAocGZ4Q29uZmlnLnBmeCkge1xuICAgICAgZGVidWcoJ1VzaW5nIFBGWCBjb25maWd1cmF0aW9uJyk7XG4gICAgICBjb25zdCB7IHBmeCwgcGFzc3BocmFzZSB9ID0gcGZ4Q29uZmlnO1xuICAgICAgaHR0cHNPcHRpb25zID0gYXNzaWduKGh0dHBzT3B0aW9ucywge1xuICAgICAgICBwZng6IGZzLnJlYWRGaWxlU3luYyhwZngpLFxuICAgICAgICBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlIHx8ICcnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdVc2luZyBLZXkvQ2VydCBjb25maWd1cmF0aW9uJyk7XG4gICAgICBjb25zdCB7IGtleSwgY2VydCwgY2EgfSA9IGtleUNlcnRDb25maWc7XG4gICAgICBodHRwc09wdGlvbnMgPSBhc3NpZ24oaHR0cHNPcHRpb25zLCB7XG4gICAgICAgIGtleTogZnMucmVhZEZpbGVTeW5jKGtleSksXG4gICAgICAgIGNlcnQ6IGZzLnJlYWRGaWxlU3luYyhjZXJ0KSxcbiAgICAgICAgLi4uKGNhICYmIHtcbiAgICAgICAgICBjYTogZnMucmVhZEZpbGVTeW5jKGNhKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGh0dHBzLmNyZWF0ZVNlcnZlcihodHRwc09wdGlvbnMsIGFwcCk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgLy8gY2F0Y2ggZXJyb3JzIHJlbGF0ZWQgdG8gY2VydGlmaWNhdGUgbG9hZGluZ1xuICAgIGxvZ2dlci5mYXRhbCh7IGVycjogZXJyIH0sICdjYW5ub3QgY3JlYXRlIGh0dHBzIHNlcnZlcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICBwcm9jZXNzLmV4aXQoMik7XG4gIH1cbn1cbi8qKlxuICpcbiAqIEBwYXJhbSB3ZWJTZXJ2ZXJcbiAqIEBwYXJhbSBhZGRyXG4gKiBAcGFyYW0gcGtnTmFtZVxuICogQHBhcmFtIHBrZ1ZlcnNpb25cbiAqIEBkZXByZWNhdGVkIHVzZSBpbml0U2VydmVyIGluc3RlYWRcbiAqL1xuZnVuY3Rpb24gbGlzdGVuRGVmYXVsdENhbGxiYWNrKFxuICB3ZWJTZXJ2ZXI6IEFwcGxpY2F0aW9uLFxuICBhZGRyOiBhbnksXG4gIHBrZ05hbWU6IHN0cmluZyxcbiAgcGtnVmVyc2lvbjogc3RyaW5nXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VydmVyID0gd2ViU2VydmVyXG4gICAgLmxpc3RlbihhZGRyLnBvcnQgfHwgYWRkci5wYXRoLCBhZGRyLmhvc3QsICgpOiB2b2lkID0+IHtcbiAgICAgIC8vIHNlbmQgYSBtZXNzYWdlIGZvciB0ZXN0c1xuICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvY2Vzcy5zZW5kKSkge1xuICAgICAgICBwcm9jZXNzLnNlbmQoe1xuICAgICAgICAgIHZlcmRhY2Npb19zdGFydGVkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICBsb2dnZXIuZmF0YWwoeyBlcnI6IGVyciB9LCAnY2Fubm90IGNyZWF0ZSBodHRwIHNlcnZlcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgyKTtcbiAgICB9KTtcblxuICBmdW5jdGlvbiBoYW5kbGVTaHV0ZG93bkdyYWNlZnVsbHkoKSB7XG4gICAgbG9nZ2VyLmZhdGFsKCdyZWNlaXZlZCBzaHV0ZG93biBzaWduYWwgLSBjbG9zaW5nIHNlcnZlciBncmFjZWZ1bGx5Li4uJyk7XG4gICAgc2VydmVyLmNsb3NlKCgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKCdzZXJ2ZXIgY2xvc2VkLicpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gaGFuZGxlIHNodXRkb3duIHNpZ25hbHMgbmljZWx5IHdoZW4gZW52aXJvbm1lbnQgc2F5cyBzb1xuICBpZiAocHJvY2Vzcy5lbnYuVkVSREFDQ0lPX0hBTkRMRV9LSUxMX1NJR05BTFMgPT09ICd0cnVlJykge1xuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGhhbmRsZVNodXRkb3duR3JhY2VmdWxseSk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGhhbmRsZVNodXRkb3duR3JhY2VmdWxseSk7XG4gICAgcHJvY2Vzcy5vbignU0lHSFVQJywgaGFuZGxlU2h1dGRvd25HcmFjZWZ1bGx5KTtcbiAgfVxuXG4gIGxvZ2dlci53YXJuKFxuICAgIHtcbiAgICAgIGFkZHI6IGFkZHIucGF0aFxuICAgICAgICA/IFVSTC5mb3JtYXQoe1xuICAgICAgICAgICAgcHJvdG9jb2w6ICd1bml4JyxcbiAgICAgICAgICAgIHBhdGhuYW1lOiBhZGRyLnBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBVUkwuZm9ybWF0KHtcbiAgICAgICAgICAgIHByb3RvY29sOiBhZGRyLnByb3RvLFxuICAgICAgICAgICAgaG9zdG5hbWU6IGFkZHIuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6IGFkZHIucG9ydCxcbiAgICAgICAgICAgIHBhdGhuYW1lOiAnLycsXG4gICAgICAgICAgfSksXG4gICAgICB2ZXJzaW9uOiBwa2dOYW1lICsgJy8nICsgcGtnVmVyc2lvbixcbiAgICB9LFxuICAgICdodHRwIGFkZHJlc3MgLSBAe2FkZHJ9IC0gQHt2ZXJzaW9ufSdcbiAgKTtcbn1cblxuZXhwb3J0IHsgc3RhcnRWZXJkYWNjaW8sIGxpc3RlbkRlZmF1bHRDYWxsYmFjayB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQUcsR0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sSUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQVEsT0FBQSxHQUFBUixPQUFBO0FBR0EsSUFBQVMsTUFBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsV0FBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsWUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksT0FBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsTUFBQSxHQUFBYixPQUFB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
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _clipanion = require("clipanion");
4
+ var _info = require("./commands/info");
5
+ var _init = require("./commands/init");
6
+ var _version = require("./commands/version");
7
+ var _utils = require("./utils");
8
+ const pkgVersion = "6.3.2" || 'dev';
9
+ if (process.getuid && process.getuid() === 0) {
10
+ process.emitWarning(`Verdaccio doesn't need superuser privileges. don't run it under root`);
11
+ }
12
+ if (!(0, _utils.isVersionValid)(process.version)) {
13
+ throw new Error(`Verdaccio requires at least Node.js v${_utils.MIN_NODE_VERSION} or higher and you have installed ${process.version},
14
+ please upgrade your Node.js distribution`);
15
+ }
16
+ const [node, app, ...args] = process.argv;
17
+ const cli = new _clipanion.Cli({
18
+ binaryLabel: `verdaccio`,
19
+ binaryName: `${node} ${app}`,
20
+ binaryVersion: pkgVersion
21
+ });
22
+ cli.register(_info.InfoCommand);
23
+ cli.register(_init.InitCommand);
24
+ cli.register(_version.VersionCommand);
25
+ cli.runExit(args, _clipanion.Cli.defaultContext);
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xpcGFuaW9uIiwicmVxdWlyZSIsIl9pbmZvIiwiX2luaXQiLCJfdmVyc2lvbiIsIl91dGlscyIsInBrZ1ZlcnNpb24iLCJwcm9jZXNzIiwiZ2V0dWlkIiwiZW1pdFdhcm5pbmciLCJpc1ZlcnNpb25WYWxpZCIsInZlcnNpb24iLCJFcnJvciIsIk1JTl9OT0RFX1ZFUlNJT04iLCJub2RlIiwiYXBwIiwiYXJncyIsImFyZ3YiLCJjbGkiLCJDbGkiLCJiaW5hcnlMYWJlbCIsImJpbmFyeU5hbWUiLCJiaW5hcnlWZXJzaW9uIiwicmVnaXN0ZXIiLCJJbmZvQ29tbWFuZCIsIkluaXRDb21tYW5kIiwiVmVyc2lvbkNvbW1hbmQiLCJydW5FeGl0IiwiZGVmYXVsdENvbnRleHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NsaS9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpIH0gZnJvbSAnY2xpcGFuaW9uJztcblxuaW1wb3J0IHsgSW5mb0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2luZm8nO1xuaW1wb3J0IHsgSW5pdENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2luaXQnO1xuaW1wb3J0IHsgVmVyc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24nO1xuaW1wb3J0IHsgTUlOX05PREVfVkVSU0lPTiwgaXNWZXJzaW9uVmFsaWQgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgcGtnVmVyc2lvbiA9IHByb2Nlc3MuZW52LlBBQ0tBR0VfVkVSU0lPTiB8fCAnZGV2JztcblxuaWYgKHByb2Nlc3MuZ2V0dWlkICYmIHByb2Nlc3MuZ2V0dWlkKCkgPT09IDApIHtcbiAgcHJvY2Vzcy5lbWl0V2FybmluZyhgVmVyZGFjY2lvIGRvZXNuJ3QgbmVlZCBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gZG9uJ3QgcnVuIGl0IHVuZGVyIHJvb3RgKTtcbn1cblxuaWYgKCFpc1ZlcnNpb25WYWxpZChwcm9jZXNzLnZlcnNpb24pKSB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgVmVyZGFjY2lvIHJlcXVpcmVzIGF0IGxlYXN0IE5vZGUuanMgdiR7TUlOX05PREVfVkVSU0lPTn0gb3IgaGlnaGVyIGFuZCB5b3UgaGF2ZSBpbnN0YWxsZWQgJHtwcm9jZXNzLnZlcnNpb259LCBcbiAgICBwbGVhc2UgdXBncmFkZSB5b3VyIE5vZGUuanMgZGlzdHJpYnV0aW9uYFxuICApO1xufVxuXG5jb25zdCBbbm9kZSwgYXBwLCAuLi5hcmdzXSA9IHByb2Nlc3MuYXJndjtcblxuY29uc3QgY2xpID0gbmV3IENsaSh7XG4gIGJpbmFyeUxhYmVsOiBgdmVyZGFjY2lvYCxcbiAgYmluYXJ5TmFtZTogYCR7bm9kZX0gJHthcHB9YCxcbiAgYmluYXJ5VmVyc2lvbjogcGtnVmVyc2lvbixcbn0pO1xuXG5jbGkucmVnaXN0ZXIoSW5mb0NvbW1hbmQpO1xuY2xpLnJlZ2lzdGVyKEluaXRDb21tYW5kKTtcbmNsaS5yZWdpc3RlcihWZXJzaW9uQ29tbWFuZCk7XG5jbGkucnVuRXhpdChhcmdzLCBDbGkuZGVmYXVsdENvbnRleHQpO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUVBLE1BQU1LLFVBQVUsR0FBRyxXQUErQixLQUFLO0FBRXZELElBQUlDLE9BQU8sQ0FBQ0MsTUFBTSxJQUFJRCxPQUFPLENBQUNDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0VBQzVDRCxPQUFPLENBQUNFLFdBQVcsQ0FBQyxzRUFBc0UsQ0FBQztBQUM3RjtBQUVBLElBQUksQ0FBQyxJQUFBQyxxQkFBYyxFQUFDSCxPQUFPLENBQUNJLE9BQU8sQ0FBQyxFQUFFO0VBQ3BDLE1BQU0sSUFBSUMsS0FBSyxDQUNiLHdDQUF3Q0MsdUJBQWdCLHFDQUFxQ04sT0FBTyxDQUFDSSxPQUFPO0FBQ2hILDZDQUNFLENBQUM7QUFDSDtBQUVBLE1BQU0sQ0FBQ0csSUFBSSxFQUFFQyxHQUFHLEVBQUUsR0FBR0MsSUFBSSxDQUFDLEdBQUdULE9BQU8sQ0FBQ1UsSUFBSTtBQUV6QyxNQUFNQyxHQUFHLEdBQUcsSUFBSUMsY0FBRyxDQUFDO0VBQ2xCQyxXQUFXLEVBQUUsV0FBVztFQUN4QkMsVUFBVSxFQUFFLEdBQUdQLElBQUksSUFBSUMsR0FBRyxFQUFFO0VBQzVCTyxhQUFhLEVBQUVoQjtBQUNqQixDQUFDLENBQUM7QUFFRlksR0FBRyxDQUFDSyxRQUFRLENBQUNDLGlCQUFXLENBQUM7QUFDekJOLEdBQUcsQ0FBQ0ssUUFBUSxDQUFDRSxpQkFBVyxDQUFDO0FBQ3pCUCxHQUFHLENBQUNLLFFBQVEsQ0FBQ0csdUJBQWMsQ0FBQztBQUM1QlIsR0FBRyxDQUFDUyxPQUFPLENBQUNYLElBQUksRUFBRUcsY0FBRyxDQUFDUyxjQUFjLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.InfoCommand = void 0;
7
+ var _clipanion = require("clipanion");
8
+ var _envinfo = _interopRequireDefault(require("envinfo"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ class InfoCommand extends _clipanion.Command {
11
+ static paths = [[`--info`], [`-i`]];
12
+ async execute() {
13
+ this.context.stdout.write('\nEnvironment Info:');
14
+ const data = await _envinfo.default.run({
15
+ System: ['OS', 'CPU'],
16
+ Binaries: ['node', 'yarn', 'npm', 'pnpm'],
17
+ Virtualization: ['Docker'],
18
+ Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'],
19
+ npmGlobalPackages: ['verdaccio']
20
+ });
21
+ this.context.stdout.write(data);
22
+ process.exit(0);
23
+ }
24
+ }
25
+ exports.InfoCommand = InfoCommand;
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xpcGFuaW9uIiwicmVxdWlyZSIsIl9lbnZpbmZvIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkluZm9Db21tYW5kIiwiQ29tbWFuZCIsInBhdGhzIiwiZXhlY3V0ZSIsImNvbnRleHQiLCJzdGRvdXQiLCJ3cml0ZSIsImRhdGEiLCJlbnZpbmZvIiwicnVuIiwiU3lzdGVtIiwiQmluYXJpZXMiLCJWaXJ0dWFsaXphdGlvbiIsIkJyb3dzZXJzIiwibnBtR2xvYmFsUGFja2FnZXMiLCJwcm9jZXNzIiwiZXhpdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NsaS9jb21tYW5kcy9pbmZvLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0IGVudmluZm8gZnJvbSAnZW52aW5mbyc7XG5cbmV4cG9ydCBjbGFzcyBJbmZvQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICBzdGF0aWMgcGF0aHMgPSBbW2AtLWluZm9gXSwgW2AtaWBdXTtcblxuICBhc3luYyBleGVjdXRlKCkge1xuICAgIHRoaXMuY29udGV4dC5zdGRvdXQud3JpdGUoJ1xcbkVudmlyb25tZW50IEluZm86Jyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGVudmluZm8ucnVuKHtcbiAgICAgIFN5c3RlbTogWydPUycsICdDUFUnXSxcbiAgICAgIEJpbmFyaWVzOiBbJ25vZGUnLCAneWFybicsICducG0nLCAncG5wbSddLFxuICAgICAgVmlydHVhbGl6YXRpb246IFsnRG9ja2VyJ10sXG4gICAgICBCcm93c2VyczogWydDaHJvbWUnLCAnRWRnZScsICdGaXJlZm94JywgJ1NhZmFyaSddLFxuICAgICAgbnBtR2xvYmFsUGFja2FnZXM6IFsndmVyZGFjY2lvJ10sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKGRhdGEpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBOEIsU0FBQUUsdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFdkIsTUFBTUcsV0FBVyxTQUFTQyxrQkFBTyxDQUFDO0VBQ3ZDLE9BQU9DLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUVuQyxNQUFNQyxPQUFPQSxDQUFBLEVBQUc7SUFDZCxJQUFJLENBQUNDLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUMscUJBQXFCLENBQUM7SUFDaEQsTUFBTUMsSUFBSSxHQUFHLE1BQU1DLGdCQUFPLENBQUNDLEdBQUcsQ0FBQztNQUM3QkMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztNQUNyQkMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO01BQ3pDQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7TUFDMUJDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQztNQUNqREMsaUJBQWlCLEVBQUUsQ0FBQyxXQUFXO0lBQ2pDLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ1YsT0FBTyxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDO0lBQy9CUSxPQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDakI7QUFDRjtBQUFDQyxPQUFBLENBQUFqQixXQUFBLEdBQUFBLFdBQUEiLCJpZ25vcmVMaXN0IjpbXX0=