@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.
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/bin/verdaccio +3 -0
- package/bin/verdaccio-canary +3 -0
- package/build/api/debug/index.js +28 -0
- package/build/api/endpoint/api/dist-tags.js +77 -0
- package/build/api/endpoint/api/package.js +103 -0
- package/build/api/endpoint/api/ping.js +13 -0
- package/build/api/endpoint/api/publish.js +359 -0
- package/build/api/endpoint/api/search.js +107 -0
- package/build/api/endpoint/api/star.js +73 -0
- package/build/api/endpoint/api/stars.js +42 -0
- package/build/api/endpoint/api/user.js +84 -0
- package/build/api/endpoint/api/v1/profile.js +69 -0
- package/build/api/endpoint/api/v1/search.js +181 -0
- package/build/api/endpoint/api/v1/token.js +140 -0
- package/build/api/endpoint/api/whoami.js +15 -0
- package/build/api/endpoint/index.js +58 -0
- package/build/api/index.js +105 -0
- package/build/api/middleware.js +56 -0
- package/build/api/web/api/index.js +31 -0
- package/build/api/web/api/package.js +165 -0
- package/build/api/web/api/search.js +53 -0
- package/build/api/web/api/user.js +70 -0
- package/build/api/web/api/utils.js +14 -0
- package/build/api/web/html/favicon.ico +0 -0
- package/build/api/web/index.js +96 -0
- package/build/index.js +76 -0
- package/build/lib/auth-utils.js +16 -0
- package/build/lib/bootstrap.js +167 -0
- package/build/lib/cli/cli.js +26 -0
- package/build/lib/cli/commands/info.js +26 -0
- package/build/lib/cli/commands/init.js +78 -0
- package/build/lib/cli/commands/version.js +17 -0
- package/build/lib/cli/utils.js +14 -0
- package/build/lib/cli.js +16 -0
- package/build/lib/config.js +22 -0
- package/build/lib/constants.js +121 -0
- package/build/lib/experiments.js +29 -0
- package/build/lib/local-storage.js +760 -0
- package/build/lib/logger/index.js +21 -0
- package/build/lib/metadata-utils.js +39 -0
- package/build/lib/run-server.js +122 -0
- package/build/lib/storage-utils.js +282 -0
- package/build/lib/storage.js +676 -0
- package/build/lib/up-storage.js +605 -0
- package/build/lib/uplink-util.js +36 -0
- package/build/lib/utils.js +265 -0
- package/conf/.gitkeep +0 -0
- package/index.js +1 -0
- package/package.json +156 -0
- package/security.txt +5 -0
- package/systemd/verdaccio.service +11 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
var _express = _interopRequireDefault(require("express"));
|
|
8
|
+
var _middleware = require("@verdaccio/middleware");
|
|
9
|
+
var _distTags = _interopRequireDefault(require("./api/dist-tags"));
|
|
10
|
+
var _package = _interopRequireDefault(require("./api/package"));
|
|
11
|
+
var _ping = _interopRequireDefault(require("./api/ping"));
|
|
12
|
+
var _publish = _interopRequireDefault(require("./api/publish"));
|
|
13
|
+
var _search = _interopRequireDefault(require("./api/search"));
|
|
14
|
+
var _stars = _interopRequireDefault(require("./api/stars"));
|
|
15
|
+
var _user = _interopRequireDefault(require("./api/user"));
|
|
16
|
+
var _profile = _interopRequireDefault(require("./api/v1/profile"));
|
|
17
|
+
var _search2 = _interopRequireDefault(require("./api/v1/search"));
|
|
18
|
+
var _token = _interopRequireDefault(require("./api/v1/token"));
|
|
19
|
+
var _whoami = _interopRequireDefault(require("./api/whoami"));
|
|
20
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
+
function _default(config, auth, storage) {
|
|
22
|
+
const app = _express.default.Router();
|
|
23
|
+
|
|
24
|
+
// validate all of these params as a package name
|
|
25
|
+
// this might be too harsh, so ask if it causes trouble
|
|
26
|
+
app.param('package', _middleware.validatePackage);
|
|
27
|
+
app.param('filename', _middleware.validateName);
|
|
28
|
+
app.param('tag', _middleware.validateName);
|
|
29
|
+
app.param('version', _middleware.validateName);
|
|
30
|
+
app.param('revision', _middleware.validateName);
|
|
31
|
+
app.param('token', _middleware.validateName);
|
|
32
|
+
|
|
33
|
+
// these can't be safely put into express url for some reason
|
|
34
|
+
// TODO: For some reason? what reason?
|
|
35
|
+
app.param('_rev', (0, _middleware.match)(/^-rev$/));
|
|
36
|
+
app.param('org_couchdb_user', (0, _middleware.match)(/^org\.couchdb\.user:/));
|
|
37
|
+
app.use(auth.apiJWTmiddleware());
|
|
38
|
+
app.use(_express.default.json({
|
|
39
|
+
strict: false,
|
|
40
|
+
limit: config.max_body_size || '10mb'
|
|
41
|
+
}));
|
|
42
|
+
app.use((0, _middleware.antiLoop)(config));
|
|
43
|
+
// encode / in a scoped package name to be matched as a single parameter in routes
|
|
44
|
+
app.use(_middleware.encodeScopePackage);
|
|
45
|
+
(0, _whoami.default)(app);
|
|
46
|
+
(0, _profile.default)(app, auth, config);
|
|
47
|
+
(0, _search.default)(app, auth, storage);
|
|
48
|
+
(0, _user.default)(app, auth, config);
|
|
49
|
+
(0, _distTags.default)(app, auth, storage);
|
|
50
|
+
(0, _publish.default)(app, auth, storage, config);
|
|
51
|
+
(0, _ping.default)(app);
|
|
52
|
+
(0, _stars.default)(app, storage);
|
|
53
|
+
(0, _search2.default)(app, auth, storage);
|
|
54
|
+
(0, _token.default)(app, auth, storage, config);
|
|
55
|
+
(0, _package.default)(app, auth, storage, config);
|
|
56
|
+
return app;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX21pZGRsZXdhcmUiLCJfZGlzdFRhZ3MiLCJfcGFja2FnZSIsIl9waW5nIiwiX3B1Ymxpc2giLCJfc2VhcmNoIiwiX3N0YXJzIiwiX3VzZXIiLCJfcHJvZmlsZSIsIl9zZWFyY2gyIiwiX3Rva2VuIiwiX3dob2FtaSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9kZWZhdWx0IiwiY29uZmlnIiwiYXV0aCIsInN0b3JhZ2UiLCJhcHAiLCJleHByZXNzIiwiUm91dGVyIiwicGFyYW0iLCJ2YWxpZGF0ZVBhY2thZ2UiLCJ2YWxpZGF0ZU5hbWUiLCJtYXRjaCIsInVzZSIsImFwaUpXVG1pZGRsZXdhcmUiLCJqc29uIiwic3RyaWN0IiwibGltaXQiLCJtYXhfYm9keV9zaXplIiwiYW50aUxvb3AiLCJlbmNvZGVTY29wZVBhY2thZ2UiLCJ3aG9hbWkiLCJwcm9maWxlIiwic2VhcmNoIiwidXNlciIsImRpc3RUYWdzIiwicHVibGlzaCIsInBpbmciLCJzdGFycyIsInYxU2VhcmNoIiwidG9rZW4iLCJwa2ciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL2VuZHBvaW50L2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IEF1dGggfSBmcm9tICdAdmVyZGFjY2lvL2F1dGgnO1xuaW1wb3J0IHtcbiAgYW50aUxvb3AsXG4gIGVuY29kZVNjb3BlUGFja2FnZSxcbiAgbWF0Y2gsXG4gIHZhbGlkYXRlTmFtZSxcbiAgdmFsaWRhdGVQYWNrYWdlLFxufSBmcm9tICdAdmVyZGFjY2lvL21pZGRsZXdhcmUnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHR5cGUgU3RvcmFnZSBmcm9tICcuLi8uLi9saWIvc3RvcmFnZSc7XG5pbXBvcnQgZGlzdFRhZ3MgZnJvbSAnLi9hcGkvZGlzdC10YWdzJztcbmltcG9ydCBwa2cgZnJvbSAnLi9hcGkvcGFja2FnZSc7XG5pbXBvcnQgcGluZyBmcm9tICcuL2FwaS9waW5nJztcbmltcG9ydCBwdWJsaXNoIGZyb20gJy4vYXBpL3B1Ymxpc2gnO1xuaW1wb3J0IHNlYXJjaCBmcm9tICcuL2FwaS9zZWFyY2gnO1xuaW1wb3J0IHN0YXJzIGZyb20gJy4vYXBpL3N0YXJzJztcbmltcG9ydCB1c2VyIGZyb20gJy4vYXBpL3VzZXInO1xuaW1wb3J0IHByb2ZpbGUgZnJvbSAnLi9hcGkvdjEvcHJvZmlsZSc7XG5pbXBvcnQgdjFTZWFyY2ggZnJvbSAnLi9hcGkvdjEvc2VhcmNoJztcbmltcG9ydCB0b2tlbiBmcm9tICcuL2FwaS92MS90b2tlbic7XG5pbXBvcnQgd2hvYW1pIGZyb20gJy4vYXBpL3dob2FtaSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChjb25maWc6IENvbmZpZywgYXV0aDogQXV0aCwgc3RvcmFnZTogU3RvcmFnZSkge1xuICBjb25zdCBhcHAgPSBleHByZXNzLlJvdXRlcigpO1xuXG4gIC8vIHZhbGlkYXRlIGFsbCBvZiB0aGVzZSBwYXJhbXMgYXMgYSBwYWNrYWdlIG5hbWVcbiAgLy8gdGhpcyBtaWdodCBiZSB0b28gaGFyc2gsIHNvIGFzayBpZiBpdCBjYXVzZXMgdHJvdWJsZVxuICBhcHAucGFyYW0oJ3BhY2thZ2UnLCB2YWxpZGF0ZVBhY2thZ2UpO1xuICBhcHAucGFyYW0oJ2ZpbGVuYW1lJywgdmFsaWRhdGVOYW1lKTtcbiAgYXBwLnBhcmFtKCd0YWcnLCB2YWxpZGF0ZU5hbWUpO1xuICBhcHAucGFyYW0oJ3ZlcnNpb24nLCB2YWxpZGF0ZU5hbWUpO1xuICBhcHAucGFyYW0oJ3JldmlzaW9uJywgdmFsaWRhdGVOYW1lKTtcbiAgYXBwLnBhcmFtKCd0b2tlbicsIHZhbGlkYXRlTmFtZSk7XG5cbiAgLy8gdGhlc2UgY2FuJ3QgYmUgc2FmZWx5IHB1dCBpbnRvIGV4cHJlc3MgdXJsIGZvciBzb21lIHJlYXNvblxuICAvLyBUT0RPOiBGb3Igc29tZSByZWFzb24/IHdoYXQgcmVhc29uP1xuICBhcHAucGFyYW0oJ19yZXYnLCBtYXRjaCgvXi1yZXYkLykpO1xuICBhcHAucGFyYW0oJ29yZ19jb3VjaGRiX3VzZXInLCBtYXRjaCgvXm9yZ1xcLmNvdWNoZGJcXC51c2VyOi8pKTtcblxuICBhcHAudXNlKGF1dGguYXBpSldUbWlkZGxld2FyZSgpKTtcbiAgYXBwLnVzZShleHByZXNzLmpzb24oeyBzdHJpY3Q6IGZhbHNlLCBsaW1pdDogY29uZmlnLm1heF9ib2R5X3NpemUgfHwgJzEwbWInIH0pKTtcbiAgYXBwLnVzZShhbnRpTG9vcChjb25maWcpKTtcbiAgLy8gZW5jb2RlIC8gaW4gYSBzY29wZWQgcGFja2FnZSBuYW1lIHRvIGJlIG1hdGNoZWQgYXMgYSBzaW5nbGUgcGFyYW1ldGVyIGluIHJvdXRlc1xuICBhcHAudXNlKGVuY29kZVNjb3BlUGFja2FnZSk7XG4gIHdob2FtaShhcHApO1xuICBwcm9maWxlKGFwcCwgYXV0aCwgY29uZmlnKTtcbiAgc2VhcmNoKGFwcCwgYXV0aCwgc3RvcmFnZSk7XG4gIHVzZXIoYXBwLCBhdXRoLCBjb25maWcpO1xuICBkaXN0VGFncyhhcHAsIGF1dGgsIHN0b3JhZ2UpO1xuICBwdWJsaXNoKGFwcCwgYXV0aCwgc3RvcmFnZSwgY29uZmlnKTtcbiAgcGluZyhhcHApO1xuICBzdGFycyhhcHAsIHN0b3JhZ2UpO1xuICB2MVNlYXJjaChhcHAsIGF1dGgsIHN0b3JhZ2UpO1xuICB0b2tlbihhcHAsIGF1dGgsIHN0b3JhZ2UsIGNvbmZpZyk7XG4gIHBrZyhhcHAsIGF1dGgsIHN0b3JhZ2UsIGNvbmZpZyk7XG4gIHJldHVybiBhcHA7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQVVBLElBQUFFLFNBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLFFBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQVosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFZLE9BQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUFrQyxTQUFBRCx1QkFBQWMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVuQixTQUFBRyxTQUFVQyxNQUFjLEVBQUVDLElBQVUsRUFBRUMsT0FBZ0IsRUFBRTtFQUNyRSxNQUFNQyxHQUFHLEdBQUdDLGdCQUFPLENBQUNDLE1BQU0sQ0FBQyxDQUFDOztFQUU1QjtFQUNBO0VBQ0FGLEdBQUcsQ0FBQ0csS0FBSyxDQUFDLFNBQVMsRUFBRUMsMkJBQWUsQ0FBQztFQUNyQ0osR0FBRyxDQUFDRyxLQUFLLENBQUMsVUFBVSxFQUFFRSx3QkFBWSxDQUFDO0VBQ25DTCxHQUFHLENBQUNHLEtBQUssQ0FBQyxLQUFLLEVBQUVFLHdCQUFZLENBQUM7RUFDOUJMLEdBQUcsQ0FBQ0csS0FBSyxDQUFDLFNBQVMsRUFBRUUsd0JBQVksQ0FBQztFQUNsQ0wsR0FBRyxDQUFDRyxLQUFLLENBQUMsVUFBVSxFQUFFRSx3QkFBWSxDQUFDO0VBQ25DTCxHQUFHLENBQUNHLEtBQUssQ0FBQyxPQUFPLEVBQUVFLHdCQUFZLENBQUM7O0VBRWhDO0VBQ0E7RUFDQUwsR0FBRyxDQUFDRyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUFHLGlCQUFLLEVBQUMsUUFBUSxDQUFDLENBQUM7RUFDbENOLEdBQUcsQ0FBQ0csS0FBSyxDQUFDLGtCQUFrQixFQUFFLElBQUFHLGlCQUFLLEVBQUMsc0JBQXNCLENBQUMsQ0FBQztFQUU1RE4sR0FBRyxDQUFDTyxHQUFHLENBQUNULElBQUksQ0FBQ1UsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0VBQ2hDUixHQUFHLENBQUNPLEdBQUcsQ0FBQ04sZ0JBQU8sQ0FBQ1EsSUFBSSxDQUFDO0lBQUVDLE1BQU0sRUFBRSxLQUFLO0lBQUVDLEtBQUssRUFBRWQsTUFBTSxDQUFDZSxhQUFhLElBQUk7RUFBTyxDQUFDLENBQUMsQ0FBQztFQUMvRVosR0FBRyxDQUFDTyxHQUFHLENBQUMsSUFBQU0sb0JBQVEsRUFBQ2hCLE1BQU0sQ0FBQyxDQUFDO0VBQ3pCO0VBQ0FHLEdBQUcsQ0FBQ08sR0FBRyxDQUFDTyw4QkFBa0IsQ0FBQztFQUMzQixJQUFBQyxlQUFNLEVBQUNmLEdBQUcsQ0FBQztFQUNYLElBQUFnQixnQkFBTyxFQUFDaEIsR0FBRyxFQUFFRixJQUFJLEVBQUVELE1BQU0sQ0FBQztFQUMxQixJQUFBb0IsZUFBTSxFQUFDakIsR0FBRyxFQUFFRixJQUFJLEVBQUVDLE9BQU8sQ0FBQztFQUMxQixJQUFBbUIsYUFBSSxFQUFDbEIsR0FBRyxFQUFFRixJQUFJLEVBQUVELE1BQU0sQ0FBQztFQUN2QixJQUFBc0IsaUJBQVEsRUFBQ25CLEdBQUcsRUFBRUYsSUFBSSxFQUFFQyxPQUFPLENBQUM7RUFDNUIsSUFBQXFCLGdCQUFPLEVBQUNwQixHQUFHLEVBQUVGLElBQUksRUFBRUMsT0FBTyxFQUFFRixNQUFNLENBQUM7RUFDbkMsSUFBQXdCLGFBQUksRUFBQ3JCLEdBQUcsQ0FBQztFQUNULElBQUFzQixjQUFLLEVBQUN0QixHQUFHLEVBQUVELE9BQU8sQ0FBQztFQUNuQixJQUFBd0IsZ0JBQVEsRUFBQ3ZCLEdBQUcsRUFBRUYsSUFBSSxFQUFFQyxPQUFPLENBQUM7RUFDNUIsSUFBQXlCLGNBQUssRUFBQ3hCLEdBQUcsRUFBRUYsSUFBSSxFQUFFQyxPQUFPLEVBQUVGLE1BQU0sQ0FBQztFQUNqQyxJQUFBNEIsZ0JBQUcsRUFBQ3pCLEdBQUcsRUFBRUYsSUFBSSxFQUFFQyxPQUFPLEVBQUVGLE1BQU0sQ0FBQztFQUMvQixPQUFPRyxHQUFHO0FBQ1oiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _compression = _interopRequireDefault(require("compression"));
|
|
8
|
+
var _cors = _interopRequireDefault(require("cors"));
|
|
9
|
+
var _express = _interopRequireDefault(require("express"));
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
|
+
var _auth = require("@verdaccio/auth");
|
|
12
|
+
var _config = require("@verdaccio/config");
|
|
13
|
+
var _core = require("@verdaccio/core");
|
|
14
|
+
var _loaders = require("@verdaccio/loaders");
|
|
15
|
+
var _middleware = require("@verdaccio/middleware");
|
|
16
|
+
var _searchIndexer = require("@verdaccio/search-indexer");
|
|
17
|
+
var _config2 = _interopRequireDefault(require("../lib/config"));
|
|
18
|
+
var _constants = require("../lib/constants");
|
|
19
|
+
var _logger = require("../lib/logger");
|
|
20
|
+
var _storage = _interopRequireDefault(require("../lib/storage"));
|
|
21
|
+
var _utils = require("../lib/utils");
|
|
22
|
+
var _debug = _interopRequireDefault(require("./debug"));
|
|
23
|
+
var _endpoint = _interopRequireDefault(require("./endpoint"));
|
|
24
|
+
var _middleware2 = require("./middleware");
|
|
25
|
+
var _web = _interopRequireDefault(require("./web"));
|
|
26
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
|
+
const version = "6.3.2" || 'dev';
|
|
28
|
+
const defineAPI = async function (config, storage) {
|
|
29
|
+
const auth = new _auth.Auth(config, _logger.logger, {
|
|
30
|
+
legacyMergeConfigs: true
|
|
31
|
+
});
|
|
32
|
+
await auth.init();
|
|
33
|
+
const app = (0, _express.default)();
|
|
34
|
+
_searchIndexer.SearchMemoryIndexer.configureStorage(storage);
|
|
35
|
+
await _searchIndexer.SearchMemoryIndexer.init(_logger.logger);
|
|
36
|
+
// run in production mode by default, just in case
|
|
37
|
+
// it shouldn't make any difference anyway
|
|
38
|
+
app.set('env', process.env.NODE_ENV || 'production');
|
|
39
|
+
|
|
40
|
+
// Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer
|
|
41
|
+
// See: https://expressjs.com/en/guide/behind-proxies.html
|
|
42
|
+
if (config.server?.trustProxy) {
|
|
43
|
+
app.set('trust proxy', config.server.trustProxy);
|
|
44
|
+
}
|
|
45
|
+
app.use((0, _cors.default)());
|
|
46
|
+
|
|
47
|
+
// // Router setup
|
|
48
|
+
app.use((0, _middleware.log)(_logger.logger));
|
|
49
|
+
app.use((0, _middleware.errorReportingMiddleware)(_logger.logger));
|
|
50
|
+
if (config.user_agent) {
|
|
51
|
+
app.use(function (_req, res, next) {
|
|
52
|
+
res.setHeader('X-Powered-By', (0, _config.getUserAgent)(config.user_agent));
|
|
53
|
+
next();
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
app.disable('x-powered-by');
|
|
57
|
+
}
|
|
58
|
+
app.use((0, _compression.default)());
|
|
59
|
+
app.get('/-/static/favicon.ico', (0, _middleware2.serveFavicon)(config));
|
|
60
|
+
|
|
61
|
+
// Hook for tests only
|
|
62
|
+
if (config._debug) {
|
|
63
|
+
(0, _debug.default)(app, config.configPath);
|
|
64
|
+
}
|
|
65
|
+
const plugins = await (0, _loaders.asyncLoadPlugin)(config.middlewares, {
|
|
66
|
+
config,
|
|
67
|
+
logger: _logger.logger
|
|
68
|
+
}, function (plugin) {
|
|
69
|
+
return typeof plugin.register_middlewares !== 'undefined';
|
|
70
|
+
}, true, config?.serverSettings?.pluginPrefix ?? 'verdaccio', _core.PLUGIN_CATEGORY.MIDDLEWARE);
|
|
71
|
+
plugins.forEach(plugin => {
|
|
72
|
+
plugin.register_middlewares(app, auth, storage);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// // For npm request
|
|
76
|
+
app.use((0, _endpoint.default)(config, auth, storage));
|
|
77
|
+
|
|
78
|
+
// For WebUI & WebUI API
|
|
79
|
+
if (_lodash.default.get(config, 'web.enable', true)) {
|
|
80
|
+
app.use((_req, res, next) => {
|
|
81
|
+
res.locals.app_version = version ?? '';
|
|
82
|
+
next();
|
|
83
|
+
});
|
|
84
|
+
const middleware = await (0, _web.default)(config, auth, storage, _logger.logger);
|
|
85
|
+
app.use(middleware);
|
|
86
|
+
} else {
|
|
87
|
+
app.get('/', function (_, __, next) {
|
|
88
|
+
next(_utils.ErrorCode.getNotFound(_constants.API_ERROR.WEB_DISABLED));
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
app.get('/*', function (_, __, next) {
|
|
92
|
+
next(_utils.ErrorCode.getNotFound(_constants.API_ERROR.FILE_NOT_FOUND));
|
|
93
|
+
});
|
|
94
|
+
app.use((0, _middleware.handleError)(_logger.logger));
|
|
95
|
+
app.use(_middleware.final);
|
|
96
|
+
return app;
|
|
97
|
+
};
|
|
98
|
+
var _default = exports.default = async function _default(configHash) {
|
|
99
|
+
const config = new _config2.default(_lodash.default.cloneDeep(configHash));
|
|
100
|
+
const storage = new _storage.default(config);
|
|
101
|
+
// waits until init calls have been initialized
|
|
102
|
+
await storage.init(config);
|
|
103
|
+
return await defineAPI(config, storage);
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tcHJlc3Npb24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jb3JzIiwiX2V4cHJlc3MiLCJfbG9kYXNoIiwiX2F1dGgiLCJfY29uZmlnIiwiX2NvcmUiLCJfbG9hZGVycyIsIl9taWRkbGV3YXJlIiwiX3NlYXJjaEluZGV4ZXIiLCJfY29uZmlnMiIsIl9jb25zdGFudHMiLCJfbG9nZ2VyIiwiX3N0b3JhZ2UiLCJfdXRpbHMiLCJfZGVidWciLCJfZW5kcG9pbnQiLCJfbWlkZGxld2FyZTIiLCJfd2ViIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidmVyc2lvbiIsImRlZmluZUFQSSIsImNvbmZpZyIsInN0b3JhZ2UiLCJhdXRoIiwiQXV0aCIsImxvZ2dlciIsImxlZ2FjeU1lcmdlQ29uZmlncyIsImluaXQiLCJhcHAiLCJleHByZXNzIiwiU2VhcmNoTWVtb3J5SW5kZXhlciIsImNvbmZpZ3VyZVN0b3JhZ2UiLCJzZXQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJzZXJ2ZXIiLCJ0cnVzdFByb3h5IiwidXNlIiwiY29ycyIsImxvZyIsImVycm9yUmVwb3J0aW5nTWlkZGxld2FyZSIsInVzZXJfYWdlbnQiLCJfcmVxIiwicmVzIiwibmV4dCIsInNldEhlYWRlciIsImdldFVzZXJBZ2VudCIsImRpc2FibGUiLCJjb21wcmVzc2lvbiIsImdldCIsInNlcnZlRmF2aWNvbiIsImhvb2tEZWJ1ZyIsImNvbmZpZ1BhdGgiLCJwbHVnaW5zIiwiYXN5bmNMb2FkUGx1Z2luIiwibWlkZGxld2FyZXMiLCJwbHVnaW4iLCJyZWdpc3Rlcl9taWRkbGV3YXJlcyIsInNlcnZlclNldHRpbmdzIiwicGx1Z2luUHJlZml4IiwiUExVR0lOX0NBVEVHT1JZIiwiTUlERExFV0FSRSIsImZvckVhY2giLCJhcGlFbmRwb2ludCIsIl8iLCJsb2NhbHMiLCJhcHBfdmVyc2lvbiIsIm1pZGRsZXdhcmUiLCJ3ZWJNaWRkbGV3YXJlIiwiX18iLCJFcnJvckNvZGUiLCJnZXROb3RGb3VuZCIsIkFQSV9FUlJPUiIsIldFQl9ESVNBQkxFRCIsIkZJTEVfTk9UX0ZPVU5EIiwiaGFuZGxlRXJyb3IiLCJmaW5hbCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImNvbmZpZ0hhc2giLCJBcHBDb25maWciLCJjbG9uZURlZXAiLCJTdG9yYWdlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tcHJlc3Npb24gZnJvbSAnY29tcHJlc3Npb24nO1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycyc7XG5pbXBvcnQgdHlwZSB7IEFwcGxpY2F0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEF1dGggfSBmcm9tICdAdmVyZGFjY2lvL2F1dGgnO1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSAnQHZlcmRhY2Npby9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBwbHVnaW5VdGlscyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBQTFVHSU5fQ0FURUdPUlkgfSBmcm9tICdAdmVyZGFjY2lvL2NvcmUnO1xuaW1wb3J0IHsgYXN5bmNMb2FkUGx1Z2luIH0gZnJvbSAnQHZlcmRhY2Npby9sb2FkZXJzJztcbmltcG9ydCB7IGVycm9yUmVwb3J0aW5nTWlkZGxld2FyZSwgZmluYWwsIGhhbmRsZUVycm9yLCBsb2cgfSBmcm9tICdAdmVyZGFjY2lvL21pZGRsZXdhcmUnO1xuaW1wb3J0IHsgU2VhcmNoTWVtb3J5SW5kZXhlciB9IGZyb20gJ0B2ZXJkYWNjaW8vc2VhcmNoLWluZGV4ZXInO1xuaW1wb3J0IHR5cGUgeyBDb25maWdZYW1sLCBDb25maWcgYXMgSUNvbmZpZyB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5pbXBvcnQgQXBwQ29uZmlnIGZyb20gJy4uL2xpYi9jb25maWcnO1xuaW1wb3J0IHsgQVBJX0VSUk9SIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9saWIvbG9nZ2VyJztcbmltcG9ydCBTdG9yYWdlIGZyb20gJy4uL2xpYi9zdG9yYWdlJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL2xpYi91dGlscyc7XG5pbXBvcnQgdHlwZSB7ICROZXh0RnVuY3Rpb25WZXIsICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgaG9va0RlYnVnIGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IGFwaUVuZHBvaW50IGZyb20gJy4vZW5kcG9pbnQnO1xuaW1wb3J0IHsgc2VydmVGYXZpY29uIH0gZnJvbSAnLi9taWRkbGV3YXJlJztcbmltcG9ydCB3ZWJNaWRkbGV3YXJlIGZyb20gJy4vd2ViJztcblxuY29uc3QgdmVyc2lvbiA9IHByb2Nlc3MuZW52LlBBQ0tBR0VfVkVSU0lPTiB8fCAnZGV2JztcblxuY29uc3QgZGVmaW5lQVBJID0gYXN5bmMgZnVuY3Rpb24gKGNvbmZpZzogSUNvbmZpZywgc3RvcmFnZTogU3RvcmFnZSk6IFByb21pc2U8ZXhwcmVzcy5BcHBsaWNhdGlvbj4ge1xuICBjb25zdCBhdXRoID0gbmV3IEF1dGgoY29uZmlnLCBsb2dnZXIsIHsgbGVnYWN5TWVyZ2VDb25maWdzOiB0cnVlIH0pO1xuICBhd2FpdCBhdXRoLmluaXQoKTtcbiAgY29uc3QgYXBwOiBBcHBsaWNhdGlvbiA9IGV4cHJlc3MoKTtcbiAgU2VhcmNoTWVtb3J5SW5kZXhlci5jb25maWd1cmVTdG9yYWdlKHN0b3JhZ2UpO1xuICBhd2FpdCBTZWFyY2hNZW1vcnlJbmRleGVyLmluaXQobG9nZ2VyKTtcbiAgLy8gcnVuIGluIHByb2R1Y3Rpb24gbW9kZSBieSBkZWZhdWx0LCBqdXN0IGluIGNhc2VcbiAgLy8gaXQgc2hvdWxkbid0IG1ha2UgYW55IGRpZmZlcmVuY2UgYW55d2F5XG4gIGFwcC5zZXQoJ2VudicsIHByb2Nlc3MuZW52Lk5PREVfRU5WIHx8ICdwcm9kdWN0aW9uJyk7XG5cbiAgLy8gQWxsb3cgYHJlcS5pcGAgdG8gcmVzb2x2ZSBwcm9wZXJseSB3aGVuIFZlcmRhY2NpbyBpcyBiZWhpbmQgYSBwcm94eSBvciBsb2FkLWJhbGFuY2VyXG4gIC8vIFNlZTogaHR0cHM6Ly9leHByZXNzanMuY29tL2VuL2d1aWRlL2JlaGluZC1wcm94aWVzLmh0bWxcbiAgaWYgKGNvbmZpZy5zZXJ2ZXI/LnRydXN0UHJveHkpIHtcbiAgICBhcHAuc2V0KCd0cnVzdCBwcm94eScsIGNvbmZpZy5zZXJ2ZXIudHJ1c3RQcm94eSk7XG4gIH1cblxuICBhcHAudXNlKGNvcnMoKSk7XG5cbiAgLy8gLy8gUm91dGVyIHNldHVwXG4gIGFwcC51c2UobG9nKGxvZ2dlcikpO1xuICBhcHAudXNlKGVycm9yUmVwb3J0aW5nTWlkZGxld2FyZShsb2dnZXIpKTtcbiAgaWYgKGNvbmZpZy51c2VyX2FnZW50KSB7XG4gICAgYXBwLnVzZShmdW5jdGlvbiAoX3JlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVBvd2VyZWQtQnknLCBnZXRVc2VyQWdlbnQoY29uZmlnLnVzZXJfYWdlbnQpKTtcbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBhcHAuZGlzYWJsZSgneC1wb3dlcmVkLWJ5Jyk7XG4gIH1cblxuICBhcHAudXNlKGNvbXByZXNzaW9uKCkpO1xuXG4gIGFwcC5nZXQoJy8tL3N0YXRpYy9mYXZpY29uLmljbycsIHNlcnZlRmF2aWNvbihjb25maWcpKTtcblxuICAvLyBIb29rIGZvciB0ZXN0cyBvbmx5XG4gIGlmIChjb25maWcuX2RlYnVnKSB7XG4gICAgaG9va0RlYnVnKGFwcCwgY29uZmlnLmNvbmZpZ1BhdGgpO1xuICB9XG5cbiAgY29uc3QgcGx1Z2luczogcGx1Z2luVXRpbHMuRXhwcmVzc01pZGRsZXdhcmU8SUNvbmZpZywgJycsIEF1dGg+W10gPSBhd2FpdCBhc3luY0xvYWRQbHVnaW4oXG4gICAgY29uZmlnLm1pZGRsZXdhcmVzLFxuICAgIHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZ2dlcixcbiAgICB9LFxuICAgIGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgcGx1Z2luLnJlZ2lzdGVyX21pZGRsZXdhcmVzICE9PSAndW5kZWZpbmVkJztcbiAgICB9LFxuICAgIHRydWUsXG4gICAgY29uZmlnPy5zZXJ2ZXJTZXR0aW5ncz8ucGx1Z2luUHJlZml4ID8/ICd2ZXJkYWNjaW8nLFxuICAgIFBMVUdJTl9DQVRFR09SWS5NSURETEVXQVJFXG4gICk7XG5cbiAgcGx1Z2lucy5mb3JFYWNoKChwbHVnaW46IGFueSkgPT4ge1xuICAgIHBsdWdpbi5yZWdpc3Rlcl9taWRkbGV3YXJlcyhhcHAsIGF1dGgsIHN0b3JhZ2UpO1xuICB9KTtcblxuICAvLyAvLyBGb3IgIG5wbSByZXF1ZXN0XG4gIGFwcC51c2UoYXBpRW5kcG9pbnQoY29uZmlnLCBhdXRoLCBzdG9yYWdlKSk7XG5cbiAgLy8gRm9yIFdlYlVJICYgV2ViVUkgQVBJXG4gIGlmIChfLmdldChjb25maWcsICd3ZWIuZW5hYmxlJywgdHJ1ZSkpIHtcbiAgICBhcHAudXNlKChfcmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIHJlcy5sb2NhbHMuYXBwX3ZlcnNpb24gPSB2ZXJzaW9uID8/ICcnO1xuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IG1pZGRsZXdhcmUgPSBhd2FpdCB3ZWJNaWRkbGV3YXJlKGNvbmZpZywgYXV0aCwgc3RvcmFnZSwgbG9nZ2VyKTtcbiAgICBhcHAudXNlKG1pZGRsZXdhcmUpO1xuICB9IGVsc2Uge1xuICAgIGFwcC5nZXQoJy8nLCBmdW5jdGlvbiAoXywgX18sIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpIHtcbiAgICAgIG5leHQoRXJyb3JDb2RlLmdldE5vdEZvdW5kKEFQSV9FUlJPUi5XRUJfRElTQUJMRUQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcC5nZXQoJy8qJywgZnVuY3Rpb24gKF8sIF9fLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKSB7XG4gICAgbmV4dChFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLkZJTEVfTk9UX0ZPVU5EKSk7XG4gIH0pO1xuICBhcHAudXNlKGhhbmRsZUVycm9yKGxvZ2dlcikpO1xuICBhcHAudXNlKGZpbmFsKTtcblxuICByZXR1cm4gYXBwO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKGFzeW5jIGZ1bmN0aW9uIChjb25maWdIYXNoOiBDb25maWdZYW1sKTogUHJvbWlzZTxleHByZXNzLkFwcGxpY2F0aW9uPiB7XG4gIGNvbnN0IGNvbmZpZzogSUNvbmZpZyA9IG5ldyBBcHBDb25maWcoXy5jbG9uZURlZXAoY29uZmlnSGFzaCkpO1xuXG4gIGNvbnN0IHN0b3JhZ2UgPSBuZXcgU3RvcmFnZShjb25maWcpO1xuICAvLyB3YWl0cyB1bnRpbCBpbml0IGNhbGxzIGhhdmUgYmVlbiBpbml0aWFsaXplZFxuICBhd2FpdCBzdG9yYWdlLmluaXQoY29uZmlnKTtcbiAgcmV0dXJuIGF3YWl0IGRlZmluZUFQSShjb25maWcsIHN0b3JhZ2UpO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFFLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUVBLElBQUFNLEtBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFdBQUEs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
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.serveFavicon = serveFavicon;
|
|
7
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
8
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _url = require("@verdaccio/url");
|
|
12
|
+
var _constants = require("../lib/constants");
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
const debug = (0, _debug.default)('verdaccio:middleware:favicon');
|
|
15
|
+
function serveFavicon(config) {
|
|
16
|
+
return function (_req, res) {
|
|
17
|
+
try {
|
|
18
|
+
const logoConf = config?.web?.favicon;
|
|
19
|
+
if (logoConf === '') {
|
|
20
|
+
debug('favicon disabled');
|
|
21
|
+
res.status(404);
|
|
22
|
+
} else if (!_lodash.default.isEmpty(logoConf)) {
|
|
23
|
+
debug('custom favicon');
|
|
24
|
+
if ((0, _url.isURL)(logoConf, {
|
|
25
|
+
require_host: true,
|
|
26
|
+
require_valid_protocol: true
|
|
27
|
+
})) {
|
|
28
|
+
debug('redirect to %o', logoConf);
|
|
29
|
+
res.redirect(logoConf);
|
|
30
|
+
return;
|
|
31
|
+
} else {
|
|
32
|
+
const faviconPath = _path.default.normalize(logoConf);
|
|
33
|
+
debug('serving favicon from %o', faviconPath);
|
|
34
|
+
_fs.default.access(faviconPath, _fs.default.constants.R_OK, err => {
|
|
35
|
+
if (err) {
|
|
36
|
+
debug('no read permissions to read: %o, reason:', logoConf, err?.message);
|
|
37
|
+
return res.status(_constants.HTTP_STATUS.NOT_FOUND).end();
|
|
38
|
+
} else {
|
|
39
|
+
res.setHeader('content-type', 'image/x-icon');
|
|
40
|
+
_fs.default.createReadStream(faviconPath).pipe(res);
|
|
41
|
+
debug('rendered custom ico');
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
} else {
|
|
46
|
+
res.setHeader('content-type', 'image/x-icon');
|
|
47
|
+
_fs.default.createReadStream(_path.default.posix.join(__dirname, './web/html/favicon.ico')).pipe(res);
|
|
48
|
+
debug('rendered ico');
|
|
49
|
+
}
|
|
50
|
+
} catch (err) {
|
|
51
|
+
debug('error triggered, favicon not found %s', err?.message);
|
|
52
|
+
res.status(_constants.HTTP_STATUS.NOT_FOUND).end();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9mcyIsIl9sb2Rhc2giLCJfcGF0aCIsIl91cmwiLCJfY29uc3RhbnRzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJidWlsZERlYnVnIiwic2VydmVGYXZpY29uIiwiY29uZmlnIiwiX3JlcSIsInJlcyIsImxvZ29Db25mIiwid2ViIiwiZmF2aWNvbiIsInN0YXR1cyIsIl8iLCJpc0VtcHR5IiwiaXNVUkwiLCJyZXF1aXJlX2hvc3QiLCJyZXF1aXJlX3ZhbGlkX3Byb3RvY29sIiwicmVkaXJlY3QiLCJmYXZpY29uUGF0aCIsInBhdGgiLCJub3JtYWxpemUiLCJmcyIsImFjY2VzcyIsImNvbnN0YW50cyIsIlJfT0siLCJlcnIiLCJtZXNzYWdlIiwiSFRUUF9TVEFUVVMiLCJOT1RfRk9VTkQiLCJlbmQiLCJzZXRIZWFkZXIiLCJjcmVhdGVSZWFkU3RyZWFtIiwicGlwZSIsInBvc2l4Iiwiam9pbiIsIl9fZGlybmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWlkZGxld2FyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgaXNVUkwgfSBmcm9tICdAdmVyZGFjY2lvL3VybCc7XG5cbmltcG9ydCB7IEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvOm1pZGRsZXdhcmU6ZmF2aWNvbicpO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VydmVGYXZpY29uKGNvbmZpZzogQ29uZmlnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvZ29Db25mOiBzdHJpbmcgPSBjb25maWc/LndlYj8uZmF2aWNvbiBhcyBzdHJpbmc7XG4gICAgICBpZiAobG9nb0NvbmYgPT09ICcnKSB7XG4gICAgICAgIGRlYnVnKCdmYXZpY29uIGRpc2FibGVkJyk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNFbXB0eShsb2dvQ29uZikpIHtcbiAgICAgICAgZGVidWcoJ2N1c3RvbSBmYXZpY29uJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc1VSTChsb2dvQ29uZiwge1xuICAgICAgICAgICAgcmVxdWlyZV9ob3N0OiB0cnVlLFxuICAgICAgICAgICAgcmVxdWlyZV92YWxpZF9wcm90b2NvbDogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWJ1ZygncmVkaXJlY3QgdG8gJW8nLCBsb2dvQ29uZik7XG4gICAgICAgICAgcmVzLnJlZGlyZWN0KGxvZ29Db25mKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmF2aWNvblBhdGggPSBwYXRoLm5vcm1hbGl6ZShsb2dvQ29uZik7XG4gICAgICAgICAgZGVidWcoJ3NlcnZpbmcgZmF2aWNvbiBmcm9tICVvJywgZmF2aWNvblBhdGgpO1xuICAgICAgICAgIGZzLmFjY2VzcyhmYXZpY29uUGF0aCwgZnMuY29uc3RhbnRzLlJfT0ssIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZGVidWcoJ25vIHJlYWQgcGVybWlzc2lvbnMgdG8gcmVhZDogJW8sIHJlYXNvbjonLCBsb2dvQ29uZiwgZXJyPy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKS5lbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICdpbWFnZS94LWljb24nKTtcbiAgICAgICAgICAgICAgZnMuY3JlYXRlUmVhZFN0cmVhbShmYXZpY29uUGF0aCkucGlwZShyZXMpO1xuICAgICAgICAgICAgICBkZWJ1ZygncmVuZGVyZWQgY3VzdG9tIGljbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAnaW1hZ2UveC1pY29uJyk7XG4gICAgICAgIGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aC5wb3NpeC5qb2luKF9fZGlybmFtZSwgJy4vd2ViL2h0bWwvZmF2aWNvbi5pY28nKSkucGlwZShyZXMpO1xuICAgICAgICBkZWJ1ZygncmVuZGVyZWQgaWNvJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGRlYnVnKCdlcnJvciB0cmlnZ2VyZWQsIGZhdmljb24gbm90IGZvdW5kICVzJywgZXJyPy5tZXNzYWdlKTtcbiAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKS5lbmQoKTtcbiAgICB9XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEdBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFJLElBQUEsR0FBQUosT0FBQTtB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
|
|
@@ -0,0 +1,31 @@
|
|
|
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 _middleware = require("@verdaccio/middleware");
|
|
9
|
+
var _utils = require("../../../lib/utils");
|
|
10
|
+
var _package = _interopRequireDefault(require("./package"));
|
|
11
|
+
var _search = _interopRequireDefault(require("./search"));
|
|
12
|
+
var _user = _interopRequireDefault(require("./user"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
var _default = (auth, storage, config) => {
|
|
15
|
+
const router = (0, _express.Router)();
|
|
16
|
+
router.use((0, _middleware.rateLimit)({
|
|
17
|
+
windowMs: 2 * 60 * 1000,
|
|
18
|
+
// 2 minutes
|
|
19
|
+
max: 5000,
|
|
20
|
+
// limit each IP to 1000 requests per windowMs
|
|
21
|
+
...config?.web?.rateLimit
|
|
22
|
+
}));
|
|
23
|
+
router.use((0, _package.default)(storage, auth, config));
|
|
24
|
+
router.use((0, _search.default)(storage, auth));
|
|
25
|
+
if ((0, _utils.hasLogin)(config)) {
|
|
26
|
+
router.use((0, _user.default)(auth, storage));
|
|
27
|
+
}
|
|
28
|
+
return router;
|
|
29
|
+
};
|
|
30
|
+
exports.default = _default;
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsInJlcXVpcmUiLCJfbWlkZGxld2FyZSIsIl91dGlscyIsIl9wYWNrYWdlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zZWFyY2giLCJfdXNlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9kZWZhdWx0IiwiYXV0aCIsInN0b3JhZ2UiLCJjb25maWciLCJyb3V0ZXIiLCJSb3V0ZXIiLCJ1c2UiLCJyYXRlTGltaXQiLCJ3aW5kb3dNcyIsIm1heCIsIndlYiIsInBhY2thZ2VBcGkiLCJzZWFyY2giLCJoYXNMb2dpbiIsInVzZXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS93ZWIvYXBpL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuXG5pbXBvcnQgeyByYXRlTGltaXQgfSBmcm9tICdAdmVyZGFjY2lvL21pZGRsZXdhcmUnO1xuXG5pbXBvcnQgeyBoYXNMb2dpbiB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgcGFja2FnZUFwaSBmcm9tICcuL3BhY2thZ2UnO1xuaW1wb3J0IHNlYXJjaCBmcm9tICcuL3NlYXJjaCc7XG5pbXBvcnQgdXNlciBmcm9tICcuL3VzZXInO1xuXG5leHBvcnQgZGVmYXVsdCAoYXV0aCwgc3RvcmFnZSwgY29uZmlnKSA9PiB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuICByb3V0ZXIudXNlKFxuICAgIHJhdGVMaW1pdCh7XG4gICAgICB3aW5kb3dNczogMiAqIDYwICogMTAwMCwgLy8gMiAgbWludXRlc1xuICAgICAgbWF4OiA1MDAwLCAvLyBsaW1pdCBlYWNoIElQIHRvIDEwMDAgcmVxdWVzdHMgcGVyIHdpbmRvd01zXG4gICAgICAuLi5jb25maWc/LndlYj8ucmF0ZUxpbWl0LFxuICAgIH0pXG4gICk7XG4gIHJvdXRlci51c2UocGFja2FnZUFwaShzdG9yYWdlLCBhdXRoLCBjb25maWcpKTtcbiAgcm91dGVyLnVzZShzZWFyY2goc3RvcmFnZSwgYXV0aCkpO1xuICBpZiAoaGFzTG9naW4oY29uZmlnKSkge1xuICAgIHJvdXRlci51c2UodXNlcihhdXRoLCBzdG9yYWdlKSk7XG4gIH1cbiAgcmV0dXJuIHJvdXRlcjtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUosT0FBQTtBQUEwQixTQUFBSSx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLElBQUFHLFFBQUEsR0FFWEEsQ0FBQ0MsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztFQUN4QyxNQUFNQyxNQUFNLEdBQUcsSUFBQUMsZUFBTSxFQUFDLENBQUM7RUFDdkJELE1BQU0sQ0FBQ0UsR0FBRyxDQUNSLElBQUFDLHFCQUFTLEVBQUM7SUFDUkMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUFFO0lBQ3pCQyxHQUFHLEVBQUUsSUFBSTtJQUFFO0lBQ1gsR0FBR04sTUFBTSxFQUFFTyxHQUFHLEVBQUVIO0VBQ2xCLENBQUMsQ0FDSCxDQUFDO0VBQ0RILE1BQU0sQ0FBQ0UsR0FBRyxDQUFDLElBQUFLLGdCQUFVLEVBQUNULE9BQU8sRUFBRUQsSUFBSSxFQUFFRSxNQUFNLENBQUMsQ0FBQztFQUM3Q0MsTUFBTSxDQUFDRSxHQUFHLENBQUMsSUFBQU0sZUFBTSxFQUFDVixPQUFPLEVBQUVELElBQUksQ0FBQyxDQUFDO0VBQ2pDLElBQUksSUFBQVksZUFBUSxFQUFDVixNQUFNLENBQUMsRUFBRTtJQUNwQkMsTUFBTSxDQUFDRSxHQUFHLENBQUMsSUFBQVEsYUFBSSxFQUFDYixJQUFJLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO0VBQ2pDO0VBQ0EsT0FBT0UsTUFBTTtBQUNmLENBQUM7QUFBQVcsT0FBQSxDQUFBaEIsT0FBQSxHQUFBQyxRQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,165 @@
|
|
|
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 _config = require("@verdaccio/config");
|
|
10
|
+
var _middleware = require("@verdaccio/middleware");
|
|
11
|
+
var _tarball = require("@verdaccio/tarball");
|
|
12
|
+
var _utils = require("@verdaccio/utils");
|
|
13
|
+
var _constants = require("../../../lib/constants");
|
|
14
|
+
var _logger = require("../../../lib/logger");
|
|
15
|
+
var _utils2 = require("../../../lib/utils");
|
|
16
|
+
var _utils3 = require("./utils");
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
const getOrder = (order = 'asc') => {
|
|
19
|
+
return order === 'asc';
|
|
20
|
+
};
|
|
21
|
+
function addPackageWebApi(storage, auth, config) {
|
|
22
|
+
/* eslint new-cap:off */
|
|
23
|
+
const pkgRouter = (0, _express.Router)();
|
|
24
|
+
const can = (0, _middleware.allow)(auth, {
|
|
25
|
+
beforeAll: (params, message) => {
|
|
26
|
+
_logger.logger.debug(params, message);
|
|
27
|
+
},
|
|
28
|
+
afterAll: (params, message) => _logger.logger.debug(params, message)
|
|
29
|
+
});
|
|
30
|
+
const checkAllow = (name, remoteUser) => new Promise((resolve, reject) => {
|
|
31
|
+
try {
|
|
32
|
+
const isLoginEnabled = _lodash.default.isNil(config?.web?.login) || config?.web?.login === true;
|
|
33
|
+
const anonymousRemoteUser = (0, _config.createAnonymousRemoteUser)();
|
|
34
|
+
const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;
|
|
35
|
+
auth.allow_access({
|
|
36
|
+
packageName: name
|
|
37
|
+
}, remoteUserAccess, (err, allowed) => {
|
|
38
|
+
if (err) {
|
|
39
|
+
resolve(false);
|
|
40
|
+
}
|
|
41
|
+
resolve(allowed);
|
|
42
|
+
});
|
|
43
|
+
} catch (err) {
|
|
44
|
+
reject(err);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Get list of all visible package
|
|
49
|
+
pkgRouter.get((0, _utils3.wrapPath)(_middleware.WebUrls.packages_all), function (req, res, next) {
|
|
50
|
+
storage.getLocalDatabase(async function (err, packages) {
|
|
51
|
+
if (err) {
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
async function processPackages(packages = []) {
|
|
55
|
+
const permissions = [];
|
|
56
|
+
const packgesCopy = packages.slice();
|
|
57
|
+
for (const pkg of packgesCopy) {
|
|
58
|
+
const pkgCopy = {
|
|
59
|
+
...pkg
|
|
60
|
+
};
|
|
61
|
+
pkgCopy.author = (0, _utils.formatAuthor)(pkg.author);
|
|
62
|
+
try {
|
|
63
|
+
const isAllowed = await checkAllow(pkg.name, req.remote_user);
|
|
64
|
+
if (isAllowed) {
|
|
65
|
+
if (config.web) {
|
|
66
|
+
pkgCopy.author.avatar = (0, _utils.generateGravatarUrl)(pkgCopy.author.email, config.web.gravatar);
|
|
67
|
+
}
|
|
68
|
+
if (!_lodash.default.isNil(pkgCopy.dist) && !_lodash.default.isNull(pkgCopy.dist.tarball)) {
|
|
69
|
+
pkgCopy.dist.tarball = (0, _tarball.getLocalRegistryTarballUri)(pkgCopy.dist.tarball, pkg.name, {
|
|
70
|
+
protocol: req.protocol,
|
|
71
|
+
headers: req.headers,
|
|
72
|
+
host: req.hostname
|
|
73
|
+
}, config.url_prefix);
|
|
74
|
+
}
|
|
75
|
+
permissions.push(pkgCopy);
|
|
76
|
+
}
|
|
77
|
+
} catch (err) {
|
|
78
|
+
_logger.logger.error({
|
|
79
|
+
name: pkg.name,
|
|
80
|
+
error: err
|
|
81
|
+
}, 'permission process for @{name} has failed: @{error}');
|
|
82
|
+
throw err;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return permissions;
|
|
86
|
+
}
|
|
87
|
+
const order = config.web ? getOrder(config.web?.sort_packages) : true;
|
|
88
|
+
try {
|
|
89
|
+
next((0, _utils2.sortByName)(await processPackages(packages), order));
|
|
90
|
+
} catch (error) {
|
|
91
|
+
next(_utils2.ErrorCode.getInternalError(error.message));
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Get package readme
|
|
97
|
+
pkgRouter.get([(0, _utils3.wrapPath)(_middleware.WebUrls.readme_package_scoped_version), (0, _utils3.wrapPath)(_middleware.WebUrls.readme_package_version)], can('access'), function (req, res, next) {
|
|
98
|
+
const rawScope = req.params.scope; // May include '@'
|
|
99
|
+
const scope = rawScope ? rawScope.slice(1) : null; // Remove '@' if present
|
|
100
|
+
const packageName = scope ? (0, _utils2.addScope)(scope, req.params.package) : req.params.package;
|
|
101
|
+
storage.getPackage({
|
|
102
|
+
name: packageName,
|
|
103
|
+
uplinksLook: true,
|
|
104
|
+
req,
|
|
105
|
+
callback: function (err, info) {
|
|
106
|
+
if (err) {
|
|
107
|
+
return next(err);
|
|
108
|
+
}
|
|
109
|
+
res.set(_constants.HEADER_TYPE.CONTENT_TYPE, _constants.HEADERS.TEXT_PLAIN);
|
|
110
|
+
next((0, _utils2.parseReadme)(info.name, info.readme));
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
pkgRouter.get([(0, _utils3.wrapPath)(_middleware.WebUrls.sidebar_scopped_package), (0, _utils3.wrapPath)(_middleware.WebUrls.sidebar_package)], can('access'), function (req, res, next) {
|
|
115
|
+
const rawScope = req.params.scope; // May include '@'
|
|
116
|
+
const scope = rawScope ? rawScope.slice(1) : null; // Remove '@' if present
|
|
117
|
+
const packageName = scope ? (0, _utils2.addScope)(scope, req.params.package) : req.params.package;
|
|
118
|
+
storage.getPackage({
|
|
119
|
+
name: packageName,
|
|
120
|
+
uplinksLook: true,
|
|
121
|
+
keepUpLinkData: true,
|
|
122
|
+
req,
|
|
123
|
+
callback: function (err, info) {
|
|
124
|
+
if (_lodash.default.isNil(err)) {
|
|
125
|
+
const {
|
|
126
|
+
v
|
|
127
|
+
} = req.query;
|
|
128
|
+
let sideBarInfo = _lodash.default.clone(info);
|
|
129
|
+
sideBarInfo.versions = (0, _tarball.convertDistRemoteToLocalTarballUrls)(info, {
|
|
130
|
+
protocol: req.protocol,
|
|
131
|
+
headers: req.headers,
|
|
132
|
+
host: req.hostname
|
|
133
|
+
}, config.url_prefix).versions;
|
|
134
|
+
if ((0, _utils2.isVersionValid)(info, v)) {
|
|
135
|
+
// @ts-ignore
|
|
136
|
+
sideBarInfo.latest = sideBarInfo.versions[v];
|
|
137
|
+
sideBarInfo.latest.author = (0, _utils.formatAuthor)(sideBarInfo.latest.author);
|
|
138
|
+
} else {
|
|
139
|
+
sideBarInfo.latest = sideBarInfo.versions[info[_constants.DIST_TAGS].latest];
|
|
140
|
+
if (sideBarInfo?.latest) {
|
|
141
|
+
sideBarInfo.latest.author = (0, _utils.formatAuthor)(sideBarInfo.latest.author);
|
|
142
|
+
} else {
|
|
143
|
+
res.status(_constants.HTTP_STATUS.NOT_FOUND);
|
|
144
|
+
res.end();
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
sideBarInfo = (0, _utils2.deleteProperties)(['readme', '_attachments', '_rev', 'name'], sideBarInfo);
|
|
149
|
+
if (config.web) {
|
|
150
|
+
sideBarInfo = (0, _utils.addGravatarSupport)(sideBarInfo, config.web.gravatar);
|
|
151
|
+
} else {
|
|
152
|
+
sideBarInfo = (0, _utils.addGravatarSupport)(sideBarInfo);
|
|
153
|
+
}
|
|
154
|
+
next(sideBarInfo);
|
|
155
|
+
} else {
|
|
156
|
+
res.status(_constants.HTTP_STATUS.NOT_FOUND);
|
|
157
|
+
res.end();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
return pkgRouter;
|
|
163
|
+
}
|
|
164
|
+
var _default = exports.default = addPackageWebApi;
|
|
165
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb25maWciLCJfbWlkZGxld2FyZSIsIl90YXJiYWxsIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwiX3V0aWxzMyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImdldE9yZGVyIiwib3JkZXIiLCJhZGRQYWNrYWdlV2ViQXBpIiwic3RvcmFnZSIsImF1dGgiLCJjb25maWciLCJwa2dSb3V0ZXIiLCJSb3V0ZXIiLCJjYW4iLCJhbGxvdyIsImJlZm9yZUFsbCIsInBhcmFtcyIsIm1lc3NhZ2UiLCJsb2dnZXIiLCJkZWJ1ZyIsImFmdGVyQWxsIiwiY2hlY2tBbGxvdyIsIm5hbWUiLCJyZW1vdGVVc2VyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJpc0xvZ2luRW5hYmxlZCIsIl8iLCJpc05pbCIsIndlYiIsImxvZ2luIiwiYW5vbnltb3VzUmVtb3RlVXNlciIsImNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIiLCJyZW1vdGVVc2VyQWNjZXNzIiwiYWxsb3dfYWNjZXNzIiwicGFja2FnZU5hbWUiLCJlcnIiLCJhbGxvd2VkIiwiZ2V0Iiwid3JhcFBhdGgiLCJXZWJVcmxzIiwicGFja2FnZXNfYWxsIiwicmVxIiwicmVzIiwibmV4dCIsImdldExvY2FsRGF0YWJhc2UiLCJwYWNrYWdlcyIsInByb2Nlc3NQYWNrYWdlcyIsInBlcm1pc3Npb25zIiwicGFja2dlc0NvcHkiLCJzbGljZSIsInBrZyIsInBrZ0NvcHkiLCJhdXRob3IiLCJmb3JtYXRBdXRob3IiLCJpc0FsbG93ZWQiLCJyZW1vdGVfdXNlciIsImF2YXRhciIsImdlbmVyYXRlR3JhdmF0YXJVcmwiLCJlbWFpbCIsImdyYXZhdGFyIiwiZGlzdCIsImlzTnVsbCIsInRhcmJhbGwiLCJnZXRMb2NhbFJlZ2lzdHJ5VGFyYmFsbFVyaSIsInByb3RvY29sIiwiaGVhZGVycyIsImhvc3QiLCJob3N0bmFtZSIsInVybF9wcmVmaXgiLCJwdXNoIiwiZXJyb3IiLCJzb3J0X3BhY2thZ2VzIiwic29ydEJ5TmFtZSIsIkVycm9yQ29kZSIsImdldEludGVybmFsRXJyb3IiLCJyZWFkbWVfcGFja2FnZV9zY29wZWRfdmVyc2lvbiIsInJlYWRtZV9wYWNrYWdlX3ZlcnNpb24iLCJyYXdTY29wZSIsInNjb3BlIiwiYWRkU2NvcGUiLCJwYWNrYWdlIiwiZ2V0UGFja2FnZSIsInVwbGlua3NMb29rIiwiY2FsbGJhY2siLCJpbmZvIiwic2V0IiwiSEVBREVSX1RZUEUiLCJDT05URU5UX1RZUEUiLCJIRUFERVJTIiwiVEVYVF9QTEFJTiIsInBhcnNlUmVhZG1lIiwicmVhZG1lIiwic2lkZWJhcl9zY29wcGVkX3BhY2thZ2UiLCJzaWRlYmFyX3BhY2thZ2UiLCJrZWVwVXBMaW5rRGF0YSIsInYiLCJxdWVyeSIsInNpZGVCYXJJbmZvIiwiY2xvbmUiLCJ2ZXJzaW9ucyIsImNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzIiwiaXNWZXJzaW9uVmFsaWQiLCJsYXRlc3QiLCJESVNUX1RBR1MiLCJzdGF0dXMiLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsImVuZCIsImRlbGV0ZVByb3BlcnRpZXMiLCJhZGRHcmF2YXRhclN1cHBvcnQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3dlYi9hcGkvcGFja2FnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB0eXBlIHsgQXV0aCB9IGZyb20gJ0B2ZXJkYWNjaW8vYXV0aCc7XG5pbXBvcnQgeyBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIH0gZnJvbSAnQHZlcmRhY2Npby9jb25maWcnO1xuaW1wb3J0IHsgV2ViVXJscywgYWxsb3cgfSBmcm9tICdAdmVyZGFjY2lvL21pZGRsZXdhcmUnO1xuaW1wb3J0IHtcbiAgY29udmVydERpc3RSZW1vdGVUb0xvY2FsVGFyYmFsbFVybHMsXG4gIGdldExvY2FsUmVnaXN0cnlUYXJiYWxsVXJpLFxufSBmcm9tICdAdmVyZGFjY2lvL3RhcmJhbGwnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcsIE1hbmlmZXN0LCBSZW1vdGVVc2VyIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBhZGRHcmF2YXRhclN1cHBvcnQsIGZvcm1hdEF1dGhvciwgZ2VuZXJhdGVHcmF2YXRhclVybCB9IGZyb20gJ0B2ZXJkYWNjaW8vdXRpbHMnO1xuXG5pbXBvcnQgeyBESVNUX1RBR1MsIEhFQURFUlMsIEhFQURFUl9UWVBFLCBIVFRQX1NUQVRVUyB9IGZyb20gJy4uLy4uLy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSBTdG9yYWdlIGZyb20gJy4uLy4uLy4uL2xpYi9zdG9yYWdlJztcbmltcG9ydCB7XG4gIEVycm9yQ29kZSxcbiAgYWRkU2NvcGUsXG4gIGRlbGV0ZVByb3BlcnRpZXMsXG4gIGlzVmVyc2lvblZhbGlkLFxuICBwYXJzZVJlYWRtZSxcbiAgc29ydEJ5TmFtZSxcbn0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgJE5leHRGdW5jdGlvblZlcixcbiAgJFJlcXVlc3RFeHRlbmQsXG4gICRSZXNwb25zZUV4dGVuZCxcbiAgJFNpZGViYXJQYWNrYWdlLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyB3cmFwUGF0aCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBnZXRPcmRlciA9IChvcmRlciA9ICdhc2MnKSA9PiB7XG4gIHJldHVybiBvcmRlciA9PT0gJ2FzYyc7XG59O1xuXG5leHBvcnQgdHlwZSBQYWNrY2FnZUV4dCA9IE1hbmlmZXN0ICYgeyBhdXRob3I6IGFueTsgZGlzdD86IHsgdGFyYmFsbDogc3RyaW5nIH0gfTtcblxuZnVuY3Rpb24gYWRkUGFja2FnZVdlYkFwaShzdG9yYWdlOiBTdG9yYWdlLCBhdXRoOiBBdXRoLCBjb25maWc6IENvbmZpZyk6IFJvdXRlciB7XG4gIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICBjb25zdCBwa2dSb3V0ZXIgPSBSb3V0ZXIoKTtcbiAgY29uc3QgY2FuID0gYWxsb3coYXV0aCwge1xuICAgIGJlZm9yZUFsbDogKHBhcmFtcywgbWVzc2FnZSkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKHBhcmFtcywgbWVzc2FnZSk7XG4gICAgfSxcbiAgICBhZnRlckFsbDogKHBhcmFtcywgbWVzc2FnZSkgPT4gbG9nZ2VyLmRlYnVnKHBhcmFtcywgbWVzc2FnZSksXG4gIH0pO1xuXG4gIGNvbnN0IGNoZWNrQWxsb3cgPSAobmFtZSwgcmVtb3RlVXNlcik6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc0xvZ2luRW5hYmxlZCA9IF8uaXNOaWwoY29uZmlnPy53ZWI/LmxvZ2luKSB8fCBjb25maWc/LndlYj8ubG9naW4gPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGFub255bW91c1JlbW90ZVVzZXI6IFJlbW90ZVVzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICAgIGNvbnN0IHJlbW90ZVVzZXJBY2Nlc3MgPSAhaXNMb2dpbkVuYWJsZWQgPyBhbm9ueW1vdXNSZW1vdGVVc2VyIDogcmVtb3RlVXNlcjtcbiAgICAgICAgYXV0aC5hbGxvd19hY2Nlc3MoeyBwYWNrYWdlTmFtZTogbmFtZSB9LCByZW1vdGVVc2VyQWNjZXNzLCAoZXJyLCBhbGxvd2VkKTogdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUoYWxsb3dlZCBhcyBib29sZWFuKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8gR2V0IGxpc3Qgb2YgYWxsIHZpc2libGUgcGFja2FnZVxuICBwa2dSb3V0ZXIuZ2V0KFxuICAgIHdyYXBQYXRoKFdlYlVybHMucGFja2FnZXNfYWxsKSxcbiAgICBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICAgIHN0b3JhZ2UuZ2V0TG9jYWxEYXRhYmFzZShhc3luYyBmdW5jdGlvbiAoZXJyLCBwYWNrYWdlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhY2thZ2VzKHBhY2thZ2VzOiBQYWNrY2FnZUV4dFtdID0gW10pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25zOiBQYWNrY2FnZUV4dFtdID0gW107XG4gICAgICAgICAgY29uc3QgcGFja2dlc0NvcHkgPSBwYWNrYWdlcy5zbGljZSgpO1xuICAgICAgICAgIGZvciAoY29uc3QgcGtnIG9mIHBhY2tnZXNDb3B5KSB7XG4gICAgICAgICAgICBjb25zdCBwa2dDb3B5ID0geyAuLi5wa2cgfTtcbiAgICAgICAgICAgIHBrZ0NvcHkuYXV0aG9yID0gZm9ybWF0QXV0aG9yKHBrZy5hdXRob3IpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNBbGxvd2VkID0gYXdhaXQgY2hlY2tBbGxvdyhwa2cubmFtZSwgcmVxLnJlbW90ZV91c2VyKTtcbiAgICAgICAgICAgICAgaWYgKGlzQWxsb3dlZCkge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcud2ViKSB7XG4gICAgICAgICAgICAgICAgICBwa2dDb3B5LmF1dGhvci5hdmF0YXIgPSBnZW5lcmF0ZUdyYXZhdGFyVXJsKFxuICAgICAgICAgICAgICAgICAgICBwa2dDb3B5LmF1dGhvci5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLndlYi5ncmF2YXRhclxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzTmlsKHBrZ0NvcHkuZGlzdCkgJiYgIV8uaXNOdWxsKHBrZ0NvcHkuZGlzdC50YXJiYWxsKSkge1xuICAgICAgICAgICAgICAgICAgcGtnQ29weS5kaXN0LnRhcmJhbGwgPSBnZXRMb2NhbFJlZ2lzdHJ5VGFyYmFsbFVyaShcbiAgICAgICAgICAgICAgICAgICAgcGtnQ29weS5kaXN0LnRhcmJhbGwsXG4gICAgICAgICAgICAgICAgICAgIHBrZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB7IHByb3RvY29sOiByZXEucHJvdG9jb2wsIGhlYWRlcnM6IHJlcS5oZWFkZXJzIGFzIGFueSwgaG9zdDogcmVxLmhvc3RuYW1lIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy51cmxfcHJlZml4XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKHBrZ0NvcHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgIHsgbmFtZTogcGtnLm5hbWUsIGVycm9yOiBlcnIgfSxcbiAgICAgICAgICAgICAgICAncGVybWlzc2lvbiBwcm9jZXNzIGZvciBAe25hbWV9IGhhcyBmYWlsZWQ6IEB7ZXJyb3J9J1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JkZXI6IGJvb2xlYW4gPSBjb25maWcud2ViID8gZ2V0T3JkZXIoY29uZmlnLndlYj8uc29ydF9wYWNrYWdlcykgOiB0cnVlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dChzb3J0QnlOYW1lKGF3YWl0IHByb2Nlc3NQYWNrYWdlcyhwYWNrYWdlcyksIG9yZGVyKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBuZXh0KEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICApO1xuXG4gIC8vIEdldCBwYWNrYWdlIHJlYWRtZVxuICBwa2dSb3V0ZXIuZ2V0KFxuICAgIFt3cmFwUGF0aChXZWJVcmxzLnJlYWRtZV9wYWNrYWdlX3Njb3BlZF92ZXJzaW9uKSwgd3JhcFBhdGgoV2ViVXJscy5yZWFkbWVfcGFja2FnZV92ZXJzaW9uKV0sXG4gICAgY2FuKCdhY2Nlc3MnKSxcbiAgICBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHJhd1Njb3BlID0gcmVxLnBhcmFtcy5zY29wZTsgLy8gTWF5IGluY2x1ZGUgJ0AnXG4gICAgICBjb25zdCBzY29wZSA9IHJhd1Njb3BlID8gcmF3U2NvcGUuc2xpY2UoMSkgOiBudWxsOyAvLyBSZW1vdmUgJ0AnIGlmIHByZXNlbnRcbiAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gc2NvcGUgPyBhZGRTY29wZShzY29wZSwgcmVxLnBhcmFtcy5wYWNrYWdlKSA6IHJlcS5wYXJhbXMucGFja2FnZTtcblxuICAgICAgc3RvcmFnZS5nZXRQYWNrYWdlKHtcbiAgICAgICAgbmFtZTogcGFja2FnZU5hbWUsXG4gICAgICAgIHVwbGlua3NMb29rOiB0cnVlLFxuICAgICAgICByZXEsXG4gICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoZXJyLCBpbmZvKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXMuc2V0KEhFQURFUl9UWVBFLkNPTlRFTlRfVFlQRSwgSEVBREVSUy5URVhUX1BMQUlOKTtcbiAgICAgICAgICBuZXh0KHBhcnNlUmVhZG1lKGluZm8ubmFtZSwgaW5mby5yZWFkbWUpKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgKTtcblxuICBwa2dSb3V0ZXIuZ2V0KFxuICAgIFt3cmFwUGF0aChXZWJVcmxzLnNpZGViYXJfc2NvcHBlZF9wYWNrYWdlKSwgd3JhcFBhdGgoV2ViVXJscy5zaWRlYmFyX3BhY2thZ2UpXSxcbiAgICBjYW4oJ2FjY2VzcycpLFxuICAgIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgICAgY29uc3QgcmF3U2NvcGUgPSByZXEucGFyYW1zLnNjb3BlOyAvLyBNYXkgaW5jbHVkZSAnQCdcbiAgICAgIGNvbnN0IHNjb3BlID0gcmF3U2NvcGUgPyByYXdTY29wZS5zbGljZSgxKSA6IG51bGw7IC8vIFJlbW92ZSAnQCcgaWYgcHJlc2VudFxuICAgICAgY29uc3QgcGFja2FnZU5hbWU6IHN0cmluZyA9IHNjb3BlID8gYWRkU2NvcGUoc2NvcGUsIHJlcS5wYXJhbXMucGFja2FnZSkgOiByZXEucGFyYW1zLnBhY2thZ2U7XG5cbiAgICAgIHN0b3JhZ2UuZ2V0UGFja2FnZSh7XG4gICAgICAgIG5hbWU6IHBhY2thZ2VOYW1lLFxuICAgICAgICB1cGxpbmtzTG9vazogdHJ1ZSxcbiAgICAgICAga2VlcFVwTGlua0RhdGE6IHRydWUsXG4gICAgICAgIHJlcSxcbiAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIChlcnI6IEVycm9yLCBpbmZvOiAkU2lkZWJhclBhY2thZ2UpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoXy5pc05pbChlcnIpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHYgfSA9IHJlcS5xdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWRlQmFySW5mbzogYW55ID0gXy5jbG9uZShpbmZvKTtcbiAgICAgICAgICAgIHNpZGVCYXJJbmZvLnZlcnNpb25zID0gY29udmVydERpc3RSZW1vdGVUb0xvY2FsVGFyYmFsbFVybHMoXG4gICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgIHsgcHJvdG9jb2w6IHJlcS5wcm90b2NvbCwgaGVhZGVyczogcmVxLmhlYWRlcnMgYXMgYW55LCBob3N0OiByZXEuaG9zdG5hbWUgfSxcbiAgICAgICAgICAgICAgY29uZmlnLnVybF9wcmVmaXhcbiAgICAgICAgICAgICkudmVyc2lvbnM7XG4gICAgICAgICAgICBpZiAoaXNWZXJzaW9uVmFsaWQoaW5mbywgdikpIHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBzaWRlQmFySW5mby5sYXRlc3QgPSBzaWRlQmFySW5mby52ZXJzaW9uc1t2XTtcbiAgICAgICAgICAgICAgc2lkZUJhckluZm8ubGF0ZXN0LmF1dGhvciA9IGZvcm1hdEF1dGhvcihzaWRlQmFySW5mby5sYXRlc3QuYXV0aG9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNpZGVCYXJJbmZvLmxhdGVzdCA9IHNpZGVCYXJJbmZvLnZlcnNpb25zW2luZm9bRElTVF9UQUdTXS5sYXRlc3RdO1xuICAgICAgICAgICAgICBpZiAoc2lkZUJhckluZm8/LmxhdGVzdCkge1xuICAgICAgICAgICAgICAgIHNpZGVCYXJJbmZvLmxhdGVzdC5hdXRob3IgPSBmb3JtYXRBdXRob3Ioc2lkZUJhckluZm8ubGF0ZXN0LmF1dGhvcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5OT1RfRk9VTkQpO1xuICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNpZGVCYXJJbmZvID0gZGVsZXRlUHJvcGVydGllcyhbJ3JlYWRtZScsICdfYXR0YWNobWVudHMnLCAnX3JldicsICduYW1lJ10sIHNpZGVCYXJJbmZvKTtcbiAgICAgICAgICAgIGlmIChjb25maWcud2ViKSB7XG4gICAgICAgICAgICAgIHNpZGVCYXJJbmZvID0gYWRkR3JhdmF0YXJTdXBwb3J0KHNpZGVCYXJJbmZvLCBjb25maWcud2ViLmdyYXZhdGFyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNpZGVCYXJJbmZvID0gYWRkR3JhdmF0YXJTdXBwb3J0KHNpZGVCYXJJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQoc2lkZUJhckluZm8pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLk5PVF9GT1VORCk7XG4gICAgICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiBwa2dSb3V0ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFkZFBhY2thZ2VXZWJBcGk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtB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
|
|
@@ -0,0 +1,53 @@
|
|
|
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 _middleware = require("@verdaccio/middleware");
|
|
9
|
+
var _searchIndexer = require("@verdaccio/search-indexer");
|
|
10
|
+
var _constants = require("../../../lib/constants");
|
|
11
|
+
var _utils = require("./utils");
|
|
12
|
+
function addSearchWebApi(storage, auth) {
|
|
13
|
+
/* eslint new-cap:off */
|
|
14
|
+
const route = (0, _express.Router)();
|
|
15
|
+
// Search package
|
|
16
|
+
route.get((0, _utils.wrapPath)(_middleware.WebUrls.search), async function (req, _res, next) {
|
|
17
|
+
const term = req.params.anything;
|
|
18
|
+
const indexer = await _searchIndexer.SearchMemoryIndexer.query(term);
|
|
19
|
+
const packages = [];
|
|
20
|
+
const results = indexer.hits;
|
|
21
|
+
const getPackageInfo = function (i) {
|
|
22
|
+
storage.getPackage({
|
|
23
|
+
name: results[i].id,
|
|
24
|
+
uplinksLook: false,
|
|
25
|
+
callback: (err, entry) => {
|
|
26
|
+
if (!err && entry) {
|
|
27
|
+
auth.allow_access({
|
|
28
|
+
packageName: entry.name
|
|
29
|
+
}, req.remote_user, function (err, allowed) {
|
|
30
|
+
if (err || !allowed) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
packages.push(entry.versions[entry[_constants.DIST_TAGS].latest]);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (i >= results.length - 1) {
|
|
37
|
+
next(packages);
|
|
38
|
+
} else {
|
|
39
|
+
getPackageInfo(i + 1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
if (results.length) {
|
|
45
|
+
getPackageInfo(0);
|
|
46
|
+
} else {
|
|
47
|
+
next([]);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return route;
|
|
51
|
+
}
|
|
52
|
+
var _default = exports.default = addSearchWebApi;
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsInJlcXVpcmUiLCJfbWlkZGxld2FyZSIsIl9zZWFyY2hJbmRleGVyIiwiX2NvbnN0YW50cyIsIl91dGlscyIsImFkZFNlYXJjaFdlYkFwaSIsInN0b3JhZ2UiLCJhdXRoIiwicm91dGUiLCJSb3V0ZXIiLCJnZXQiLCJ3cmFwUGF0aCIsIldlYlVybHMiLCJzZWFyY2giLCJyZXEiLCJfcmVzIiwibmV4dCIsInRlcm0iLCJwYXJhbXMiLCJhbnl0aGluZyIsImluZGV4ZXIiLCJTZWFyY2hNZW1vcnlJbmRleGVyIiwicXVlcnkiLCJwYWNrYWdlcyIsInJlc3VsdHMiLCJoaXRzIiwiZ2V0UGFja2FnZUluZm8iLCJpIiwiZ2V0UGFja2FnZSIsIm5hbWUiLCJpZCIsInVwbGlua3NMb29rIiwiY2FsbGJhY2siLCJlcnIiLCJlbnRyeSIsImFsbG93X2FjY2VzcyIsInBhY2thZ2VOYW1lIiwicmVtb3RlX3VzZXIiLCJhbGxvd2VkIiwicHVzaCIsInZlcnNpb25zIiwiRElTVF9UQUdTIiwibGF0ZXN0IiwibGVuZ3RoIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2FwaS9zZWFyY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5cbmltcG9ydCB0eXBlIHsgQXV0aCB9IGZyb20gJ0B2ZXJkYWNjaW8vYXV0aCc7XG5pbXBvcnQgeyBXZWJVcmxzIH0gZnJvbSAnQHZlcmRhY2Npby9taWRkbGV3YXJlJztcbmltcG9ydCB7IFNlYXJjaE1lbW9yeUluZGV4ZXIgfSBmcm9tICdAdmVyZGFjY2lvL3NlYXJjaC1pbmRleGVyJztcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3QgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgRElTVF9UQUdTIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSBTdG9yYWdlIGZyb20gJy4uLy4uLy4uL2xpYi9zdG9yYWdlJztcbmltcG9ydCB0eXBlIHsgJE5leHRGdW5jdGlvblZlciwgJFJlcXVlc3RFeHRlbmQsICRSZXNwb25zZUV4dGVuZCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IHdyYXBQYXRoIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGFkZFNlYXJjaFdlYkFwaShzdG9yYWdlOiBTdG9yYWdlLCBhdXRoOiBBdXRoKTogUm91dGVyIHtcbiAgLyogZXNsaW50IG5ldy1jYXA6b2ZmICovXG4gIGNvbnN0IHJvdXRlID0gUm91dGVyKCk7XG4gIC8vIFNlYXJjaCBwYWNrYWdlXG4gIHJvdXRlLmdldChcbiAgICB3cmFwUGF0aChXZWJVcmxzLnNlYXJjaCksXG4gICAgYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgcmVxOiAkUmVxdWVzdEV4dGVuZCxcbiAgICAgIF9yZXM6ICRSZXNwb25zZUV4dGVuZCxcbiAgICAgIG5leHQ6ICROZXh0RnVuY3Rpb25WZXJcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHRlcm0gPSByZXEucGFyYW1zLmFueXRoaW5nO1xuICAgICAgY29uc3QgaW5kZXhlciA9IChhd2FpdCBTZWFyY2hNZW1vcnlJbmRleGVyLnF1ZXJ5KHRlcm0pKSBhcyBhbnk7XG4gICAgICBjb25zdCBwYWNrYWdlczogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBpbmRleGVyLmhpdHM7XG5cbiAgICAgIGNvbnN0IGdldFBhY2thZ2VJbmZvID0gZnVuY3Rpb24gKGkpOiB2b2lkIHtcbiAgICAgICAgc3RvcmFnZS5nZXRQYWNrYWdlKHtcbiAgICAgICAgICBuYW1lOiByZXN1bHRzW2ldLmlkLFxuICAgICAgICAgIHVwbGlua3NMb29rOiBmYWxzZSxcbiAgICAgICAgICBjYWxsYmFjazogKGVyciwgZW50cnk6IE1hbmlmZXN0KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoIWVyciAmJiBlbnRyeSkge1xuICAgICAgICAgICAgICBhdXRoLmFsbG93X2FjY2VzcyhcbiAgICAgICAgICAgICAgICB7IHBhY2thZ2VOYW1lOiBlbnRyeS5uYW1lIH0sXG4gICAgICAgICAgICAgICAgcmVxLnJlbW90ZV91c2VyLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIGFsbG93ZWQpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgIWFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBwYWNrYWdlcy5wdXNoKGVudHJ5LnZlcnNpb25zW2VudHJ5W0RJU1RfVEFHU10ubGF0ZXN0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaSA+PSByZXN1bHRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgbmV4dChwYWNrYWdlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBnZXRQYWNrYWdlSW5mbyhpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAocmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgZ2V0UGFja2FnZUluZm8oMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0KFtdKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIHJvdXRlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhZGRTZWFyY2hXZWJBcGk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUdBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGNBQUEsR0FBQUYsT0FBQTtBQUdBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUdBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUVBLFNBQVNLLGVBQWVBLENBQUNDLE9BQWdCLEVBQUVDLElBQVUsRUFBVTtFQUM3RDtFQUNBLE1BQU1DLEtBQUssR0FBRyxJQUFBQyxlQUFNLEVBQUMsQ0FBQztFQUN0QjtFQUNBRCxLQUFLLENBQUNFLEdBQUcsQ0FDUCxJQUFBQyxlQUFRLEVBQUNDLG1CQUFPLENBQUNDLE1BQU0sQ0FBQyxFQUN4QixnQkFDRUMsR0FBbUIsRUFDbkJDLElBQXFCLEVBQ3JCQyxJQUFzQixFQUNQO0lBQ2YsTUFBTUMsSUFBSSxHQUFHSCxHQUFHLENBQUNJLE1BQU0sQ0FBQ0MsUUFBUTtJQUNoQyxNQUFNQyxPQUFPLEdBQUksTUFBTUMsa0NBQW1CLENBQUNDLEtBQUssQ0FBQ0wsSUFBSSxDQUFTO0lBQzlELE1BQU1NLFFBQWUsR0FBRyxFQUFFO0lBQzFCLE1BQU1DLE9BQU8sR0FBR0osT0FBTyxDQUFDSyxJQUFJO0lBRTVCLE1BQU1DLGNBQWMsR0FBRyxTQUFBQSxDQUFVQyxDQUFDLEVBQVE7TUFDeENyQixPQUFPLENBQUNzQixVQUFVLENBQUM7UUFDakJDLElBQUksRUFBRUwsT0FBTyxDQUFDRyxDQUFDLENBQUMsQ0FBQ0csRUFBRTtRQUNuQkMsV0FBVyxFQUFFLEtBQUs7UUFDbEJDLFFBQVEsRUFBRUEsQ0FBQ0MsR0FBRyxFQUFFQyxLQUFlLEtBQVc7VUFDeEMsSUFBSSxDQUFDRCxHQUFHLElBQUlDLEtBQUssRUFBRTtZQUNqQjNCLElBQUksQ0FBQzRCLFlBQVksQ0FDZjtjQUFFQyxXQUFXLEVBQUVGLEtBQUssQ0FBQ0w7WUFBSyxDQUFDLEVBQzNCZixHQUFHLENBQUN1QixXQUFXLEVBQ2YsVUFBVUosR0FBRyxFQUFFSyxPQUFPLEVBQVE7Y0FDNUIsSUFBSUwsR0FBRyxJQUFJLENBQUNLLE9BQU8sRUFBRTtnQkFDbkI7Y0FDRjtjQUVBZixRQUFRLENBQUNnQixJQUFJLENBQUNMLEtBQUssQ0FBQ00sUUFBUSxDQUFDTixLQUFLLENBQUNPLG9CQUFTLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLENBQUM7WUFDeEQsQ0FDRixDQUFDO1VBQ0g7VUFFQSxJQUFJZixDQUFDLElBQUlILE9BQU8sQ0FBQ21CLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IzQixJQUFJLENBQUNPLFFBQVEsQ0FBQztVQUNoQixDQUFDLE1BQU07WUFDTEcsY0FBYyxDQUFDQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3ZCO1FBQ0Y7TUFDRixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSUgsT0FBTyxDQUFDbUIsTUFBTSxFQUFFO01BQ2xCakIsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLE1BQU07TUFDTFYsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNWO0VBQ0YsQ0FDRixDQUFDO0VBRUQsT0FBT1IsS0FBSztBQUNkO0FBQUMsSUFBQW9DLFFBQUEsR0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBRWN6QyxlQUFlIiwiaWdub3JlTGlzdCI6W119
|