@verdaccio/web 6.0.0-6-next.38 → 6.0.0-6-next.40
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/CHANGELOG.md +30 -0
- package/build/api/index.js +1 -15
- package/build/api/index.js.map +1 -1
- package/build/api/package.js +10 -36
- package/build/api/package.js.map +1 -1
- package/build/api/readme.d.ts +1 -1
- package/build/api/readme.js +1 -14
- package/build/api/readme.js.map +1 -1
- package/build/api/search.js +5 -18
- package/build/api/search.js.map +1 -1
- package/build/api/sidebar.d.ts +2 -2
- package/build/api/sidebar.js +11 -25
- package/build/api/sidebar.js.map +1 -1
- package/build/api/user.js +1 -17
- package/build/api/user.js.map +1 -1
- package/build/index.js +0 -2
- package/build/index.js.map +1 -1
- package/build/middleware/render-web.js +8 -28
- package/build/middleware/render-web.js.map +1 -1
- package/build/middleware/security.js +6 -8
- package/build/middleware/security.js.map +1 -1
- package/build/middleware/web-api.js +2 -9
- package/build/middleware/web-api.js.map +1 -1
- package/build/renderHTML.js +2 -18
- package/build/renderHTML.js.map +1 -1
- package/build/template.d.ts +1 -1
- package/build/template.js +0 -6
- package/build/template.js.map +1 -1
- package/build/utils/manifest.d.ts +1 -1
- package/build/utils/manifest.js +0 -4
- package/build/utils/manifest.js.map +1 -1
- package/build/utils/web-utils.d.ts +1 -1
- package/build/utils/web-utils.js +0 -14
- package/build/utils/web-utils.js.map +1 -1
- package/build/web-middleware.js +4 -11
- package/build/web-middleware.js.map +1 -1
- package/package.json +19 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# @verdaccio/web
|
|
2
2
|
|
|
3
|
+
## 6.0.0-6-next.40
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- @verdaccio/auth@6.0.0-6-next.32
|
|
8
|
+
- @verdaccio/core@6.0.0-6-next.53
|
|
9
|
+
- @verdaccio/tarball@11.0.0-6-next.22
|
|
10
|
+
- @verdaccio/url@11.0.0-6-next.19
|
|
11
|
+
- @verdaccio/loaders@6.0.0-6-next.22
|
|
12
|
+
- @verdaccio/logger@6.0.0-6-next.21
|
|
13
|
+
- @verdaccio/store@6.0.0-6-next.33
|
|
14
|
+
- @verdaccio/config@6.0.0-6-next.53
|
|
15
|
+
- @verdaccio/middleware@6.0.0-6-next.32
|
|
16
|
+
- @verdaccio/utils@6.0.0-6-next.21
|
|
17
|
+
|
|
18
|
+
## 6.0.0-6-next.39
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- @verdaccio/core@6.0.0-6-next.52
|
|
23
|
+
- @verdaccio/config@6.0.0-6-next.52
|
|
24
|
+
- @verdaccio/auth@6.0.0-6-next.31
|
|
25
|
+
- @verdaccio/tarball@11.0.0-6-next.21
|
|
26
|
+
- @verdaccio/url@11.0.0-6-next.18
|
|
27
|
+
- @verdaccio/loaders@6.0.0-6-next.21
|
|
28
|
+
- @verdaccio/logger@6.0.0-6-next.20
|
|
29
|
+
- @verdaccio/middleware@6.0.0-6-next.31
|
|
30
|
+
- @verdaccio/store@6.0.0-6-next.32
|
|
31
|
+
- @verdaccio/utils@6.0.0-6-next.20
|
|
32
|
+
|
|
3
33
|
## 6.0.0-6-next.38
|
|
4
34
|
|
|
5
35
|
### Minor Changes
|
package/build/api/index.js
CHANGED
|
@@ -4,38 +4,24 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _express = require("express");
|
|
9
|
-
|
|
10
8
|
var _webUtils = require("../utils/web-utils");
|
|
11
|
-
|
|
12
9
|
var _package = _interopRequireDefault(require("./package"));
|
|
13
|
-
|
|
14
10
|
var _readme = _interopRequireDefault(require("./readme"));
|
|
15
|
-
|
|
16
11
|
var _search = _interopRequireDefault(require("./search"));
|
|
17
|
-
|
|
18
12
|
var _sidebar = _interopRequireDefault(require("./sidebar"));
|
|
19
|
-
|
|
20
13
|
var _user = _interopRequireDefault(require("./user"));
|
|
21
|
-
|
|
22
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
24
15
|
var _default = (auth, storage, config) => {
|
|
25
|
-
const route = (0, _express.Router)();
|
|
26
|
-
/* eslint new-cap: 0 */
|
|
27
|
-
|
|
16
|
+
const route = (0, _express.Router)(); /* eslint new-cap: 0 */
|
|
28
17
|
route.use('/data/', (0, _package.default)(storage, auth, config));
|
|
29
18
|
route.use('/data/', (0, _search.default)(storage, auth));
|
|
30
19
|
route.use('/data/', (0, _sidebar.default)(config, storage, auth));
|
|
31
20
|
route.use('/data/', (0, _readme.default)(storage, auth));
|
|
32
|
-
|
|
33
21
|
if ((0, _webUtils.hasLogin)(config)) {
|
|
34
22
|
route.use('/sec/', (0, _user.default)(auth, config));
|
|
35
23
|
}
|
|
36
|
-
|
|
37
24
|
return route;
|
|
38
25
|
};
|
|
39
|
-
|
|
40
26
|
exports.default = _default;
|
|
41
27
|
//# sourceMappingURL=index.js.map
|
package/build/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["auth","storage","config","route","Router","use","packageApi","search","sidebar","readme","hasLogin","user"],"sources":["../../src/api/index.ts"],"sourcesContent":["import { Router } from 'express';\n\nimport { hasLogin } from '../utils/web-utils';\nimport packageApi from './package';\nimport readme from './readme';\nimport search from './search';\nimport sidebar from './sidebar';\nimport user from './user';\n\nexport default (auth, storage, config) => {\n const route = Router(); /* eslint new-cap: 0 */\n route.use('/data/', packageApi(storage, auth, config));\n route.use('/data/', search(storage, auth));\n route.use('/data/', sidebar(config, storage, auth));\n route.use('/data/', readme(storage, auth));\n if (hasLogin(config)) {\n route.use('/sec/', user(auth, config));\n }\n return route;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["auth","storage","config","route","Router","use","packageApi","search","sidebar","readme","hasLogin","user"],"sources":["../../src/api/index.ts"],"sourcesContent":["import { Router } from 'express';\n\nimport { hasLogin } from '../utils/web-utils';\nimport packageApi from './package';\nimport readme from './readme';\nimport search from './search';\nimport sidebar from './sidebar';\nimport user from './user';\n\nexport default (auth, storage, config) => {\n const route = Router(); /* eslint new-cap: 0 */\n route.use('/data/', packageApi(storage, auth, config));\n route.use('/data/', search(storage, auth));\n route.use('/data/', sidebar(config, storage, auth));\n route.use('/data/', readme(storage, auth));\n if (hasLogin(config)) {\n route.use('/sec/', user(auth, config));\n }\n return route;\n};\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAA0B;AAAA,eAEX,CAACA,IAAI,EAAEC,OAAO,EAAEC,MAAM,KAAK;EACxC,MAAMC,KAAK,GAAG,IAAAC,eAAM,GAAE,CAAC,CAAC;EACxBD,KAAK,CAACE,GAAG,CAAC,QAAQ,EAAE,IAAAC,gBAAU,EAACL,OAAO,EAAED,IAAI,EAAEE,MAAM,CAAC,CAAC;EACtDC,KAAK,CAACE,GAAG,CAAC,QAAQ,EAAE,IAAAE,eAAM,EAACN,OAAO,EAAED,IAAI,CAAC,CAAC;EAC1CG,KAAK,CAACE,GAAG,CAAC,QAAQ,EAAE,IAAAG,gBAAO,EAACN,MAAM,EAAED,OAAO,EAAED,IAAI,CAAC,CAAC;EACnDG,KAAK,CAACE,GAAG,CAAC,QAAQ,EAAE,IAAAI,eAAM,EAACR,OAAO,EAAED,IAAI,CAAC,CAAC;EAC1C,IAAI,IAAAU,kBAAQ,EAACR,MAAM,CAAC,EAAE;IACpBC,KAAK,CAACE,GAAG,CAAC,OAAO,EAAE,IAAAM,aAAI,EAACX,IAAI,EAAEE,MAAM,CAAC,CAAC;EACxC;EACA,OAAOC,KAAK;AACd,CAAC;AAAA"}
|
package/build/api/package.js
CHANGED
|
@@ -22,51 +22,36 @@ Object.defineProperty(exports, "$ResponseExtend", {
|
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
exports.default = void 0;
|
|
25
|
-
|
|
26
25
|
var _debug = _interopRequireDefault(require("debug"));
|
|
27
|
-
|
|
28
26
|
var _express = require("express");
|
|
29
|
-
|
|
30
27
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
31
|
-
|
|
32
28
|
var _logger = require("@verdaccio/logger");
|
|
33
|
-
|
|
34
29
|
var _middleware = require("@verdaccio/middleware");
|
|
35
|
-
|
|
36
30
|
var _tarball = require("@verdaccio/tarball");
|
|
37
|
-
|
|
38
31
|
var _utils = require("@verdaccio/utils");
|
|
39
|
-
|
|
40
32
|
var _webUtils = require("../utils/web-utils");
|
|
41
|
-
|
|
42
33
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
43
|
-
|
|
44
34
|
// Was required by other packages
|
|
35
|
+
|
|
45
36
|
const getOrder = (order = 'asc') => {
|
|
46
37
|
return order === 'asc';
|
|
47
38
|
};
|
|
48
|
-
|
|
49
39
|
const debug = (0, _debug.default)('verdaccio:web:api:package');
|
|
50
|
-
|
|
51
40
|
function addPackageWebApi(storage, auth, config) {
|
|
52
41
|
var _config$web;
|
|
53
|
-
|
|
54
42
|
const isLoginEnabled = (config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.login) === true ?? true;
|
|
55
|
-
const pkgRouter = (0, _express.Router)();
|
|
56
|
-
/* eslint new-cap: 0 */
|
|
43
|
+
const pkgRouter = (0, _express.Router)(); /* eslint new-cap: 0 */
|
|
57
44
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
58
|
-
|
|
59
45
|
const anonymousRemoteUser = {
|
|
60
46
|
name: undefined,
|
|
61
47
|
real_groups: [],
|
|
62
48
|
groups: []
|
|
63
49
|
};
|
|
64
50
|
debug('initialized package web api');
|
|
65
|
-
|
|
66
51
|
const checkAllow = (name, remoteUser) => new Promise((resolve, reject) => {
|
|
67
|
-
debug('is login disabled %o', isLoginEnabled);
|
|
52
|
+
debug('is login disabled %o', isLoginEnabled);
|
|
53
|
+
// FIXME: this logic does not work, review
|
|
68
54
|
// const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;
|
|
69
|
-
|
|
70
55
|
try {
|
|
71
56
|
auth.allow_access({
|
|
72
57
|
packageName: name
|
|
@@ -74,33 +59,29 @@ function addPackageWebApi(storage, auth, config) {
|
|
|
74
59
|
if (err) {
|
|
75
60
|
resolve(false);
|
|
76
61
|
}
|
|
77
|
-
|
|
78
62
|
return resolve(allowed);
|
|
79
63
|
});
|
|
80
64
|
} catch (err) {
|
|
81
65
|
reject(err);
|
|
82
66
|
}
|
|
83
67
|
});
|
|
84
|
-
|
|
85
68
|
async function processPackages(packages = [], req) {
|
|
86
69
|
const permissions = [];
|
|
87
70
|
const packagesToProcess = packages.slice();
|
|
88
71
|
debug('process packages %o', packagesToProcess);
|
|
89
|
-
|
|
90
72
|
for (const pkg of packagesToProcess) {
|
|
91
|
-
const pkgCopy = {
|
|
73
|
+
const pkgCopy = {
|
|
74
|
+
...pkg
|
|
92
75
|
};
|
|
93
76
|
pkgCopy.author = (0, _utils.formatAuthor)(pkg.author);
|
|
94
|
-
|
|
95
77
|
try {
|
|
96
78
|
if (await checkAllow(pkg.name, req.remote_user)) {
|
|
97
79
|
if (config.web) {
|
|
98
80
|
// @ts-ignore
|
|
99
81
|
pkgCopy.author.avatar = (0, _utils.generateGravatarUrl)(pkgCopy.author.email, config.web.gravatar);
|
|
100
|
-
}
|
|
82
|
+
}
|
|
83
|
+
// convert any remote dist to a local reference
|
|
101
84
|
// eg: if the dist points to npmjs, switch to localhost:4873/prefix/etc.tar.gz
|
|
102
|
-
|
|
103
|
-
|
|
104
85
|
if (!_lodash.default.isNil(pkgCopy.dist) && !_lodash.default.isNull(pkgCopy.dist.tarball)) {
|
|
105
86
|
pkgCopy.dist.tarball = (0, _tarball.getLocalRegistryTarballUri)(pkgCopy.dist.tarball, pkg.name, {
|
|
106
87
|
protocol: req.protocol,
|
|
@@ -108,31 +89,25 @@ function addPackageWebApi(storage, auth, config) {
|
|
|
108
89
|
host: req.hostname
|
|
109
90
|
}, config === null || config === void 0 ? void 0 : config.url_prefix);
|
|
110
91
|
}
|
|
111
|
-
|
|
112
92
|
permissions.push(pkgCopy);
|
|
113
93
|
}
|
|
114
94
|
} catch (err) {
|
|
115
95
|
debug('process packages error %o', err);
|
|
116
|
-
|
|
117
96
|
_logger.logger.error({
|
|
118
97
|
name: pkg.name,
|
|
119
98
|
error: err
|
|
120
99
|
}, 'permission process for @{name} has failed: @{error}');
|
|
121
|
-
|
|
122
100
|
throw err;
|
|
123
101
|
}
|
|
124
102
|
}
|
|
125
|
-
|
|
126
103
|
return permissions;
|
|
127
|
-
}
|
|
128
|
-
|
|
104
|
+
}
|
|
129
105
|
|
|
106
|
+
// Get list of all visible package
|
|
130
107
|
pkgRouter.get('/packages', async function (req, res, next) {
|
|
131
108
|
debug('hit package web api %o');
|
|
132
|
-
|
|
133
109
|
try {
|
|
134
110
|
var _config$web2;
|
|
135
|
-
|
|
136
111
|
const localPackages = await storage.getLocalDatabase();
|
|
137
112
|
const order = getOrder(config === null || config === void 0 ? void 0 : (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.sort_packages);
|
|
138
113
|
debug('order %o', order);
|
|
@@ -144,7 +119,6 @@ function addPackageWebApi(storage, auth, config) {
|
|
|
144
119
|
});
|
|
145
120
|
return pkgRouter;
|
|
146
121
|
}
|
|
147
|
-
|
|
148
122
|
var _default = addPackageWebApi;
|
|
149
123
|
exports.default = _default;
|
|
150
124
|
//# sourceMappingURL=package.js.map
|
package/build/api/package.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.js","names":["getOrder","order","debug","buildDebug","addPackageWebApi","storage","auth","config","isLoginEnabled","web","login","pkgRouter","Router","anonymousRemoteUser","name","undefined","real_groups","groups","checkAllow","remoteUser","Promise","resolve","reject","allow_access","packageName","err","allowed","processPackages","packages","req","permissions","packagesToProcess","slice","pkg","pkgCopy","author","formatAuthor","remote_user","avatar","generateGravatarUrl","email","gravatar","_","isNil","dist","isNull","tarball","getLocalRegistryTarballUri","protocol","headers","host","hostname","url_prefix","push","logger","error","get","res","next","localPackages","getLocalDatabase","sort_packages","pkgs","sortByName"],"sources":["../../src/api/package.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\n\nimport { Auth } from '@verdaccio/auth';\nimport { logger } from '@verdaccio/logger';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { getLocalRegistryTarballUri } from '@verdaccio/tarball';\nimport { Config, RemoteUser, Version } from '@verdaccio/types';\nimport { formatAuthor, generateGravatarUrl } from '@verdaccio/utils';\n\nimport { sortByName } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nconst getOrder = (order = 'asc') => {\n return order === 'asc';\n};\n\nconst debug = buildDebug('verdaccio:web:api:package');\n\nfunction addPackageWebApi(storage: Storage, auth: Auth, config: Config): Router {\n const isLoginEnabled = config?.web?.login === true ?? true;\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const anonymousRemoteUser: RemoteUser = {\n name: undefined,\n real_groups: [],\n groups: [],\n };\n\n debug('initialized package web api');\n const checkAllow = (name: string, remoteUser: RemoteUser): Promise<boolean> =>\n new Promise((resolve, reject): void => {\n debug('is login disabled %o', isLoginEnabled);\n // FIXME: this logic does not work, review\n // const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;\n try {\n auth.allow_access({ packageName: name }, remoteUser, (err, allowed): void => {\n if (err) {\n resolve(false);\n }\n return resolve(allowed as boolean);\n });\n } catch (err: any) {\n reject(err);\n }\n });\n\n async function processPackages(packages: Version[] = [], req): Promise<Version[]> {\n const permissions: Version[] = [];\n const packagesToProcess = packages.slice();\n debug('process packages %o', packagesToProcess);\n for (const pkg of packagesToProcess) {\n const pkgCopy = { ...pkg };\n pkgCopy.author = formatAuthor(pkg.author);\n try {\n if (await checkAllow(pkg.name, req.remote_user)) {\n if (config.web) {\n // @ts-ignore\n pkgCopy.author.avatar = generateGravatarUrl(pkgCopy.author.email, config.web.gravatar);\n }\n // convert any remote dist to a local reference\n // eg: if the dist points to npmjs, switch to localhost:4873/prefix/etc.tar.gz\n if (!_.isNil(pkgCopy.dist) && !_.isNull(pkgCopy.dist.tarball)) {\n pkgCopy.dist.tarball = getLocalRegistryTarballUri(\n pkgCopy.dist.tarball,\n pkg.name,\n { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\n config?.url_prefix\n );\n }\n permissions.push(pkgCopy);\n }\n } catch (err: any) {\n debug('process packages error %o', err);\n logger.error(\n { name: pkg.name, error: err },\n 'permission process for @{name} has failed: @{error}'\n );\n throw err;\n }\n }\n\n return permissions;\n }\n\n // Get list of all visible package\n pkgRouter.get(\n '/packages',\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('hit package web api %o');\n\n try {\n const localPackages: Version[] = await storage.getLocalDatabase();\n\n const order = getOrder(config?.web?.sort_packages);\n debug('order %o', order);\n const pkgs = await processPackages(localPackages, req);\n next(sortByName(pkgs, order));\n } catch (error: any) {\n next(error);\n }\n }\n );\n\n return pkgRouter;\n}\n\nexport default addPackageWebApi;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"package.js","names":["getOrder","order","debug","buildDebug","addPackageWebApi","storage","auth","config","isLoginEnabled","web","login","pkgRouter","Router","anonymousRemoteUser","name","undefined","real_groups","groups","checkAllow","remoteUser","Promise","resolve","reject","allow_access","packageName","err","allowed","processPackages","packages","req","permissions","packagesToProcess","slice","pkg","pkgCopy","author","formatAuthor","remote_user","avatar","generateGravatarUrl","email","gravatar","_","isNil","dist","isNull","tarball","getLocalRegistryTarballUri","protocol","headers","host","hostname","url_prefix","push","logger","error","get","res","next","localPackages","getLocalDatabase","sort_packages","pkgs","sortByName"],"sources":["../../src/api/package.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\n\nimport { Auth } from '@verdaccio/auth';\nimport { logger } from '@verdaccio/logger';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { getLocalRegistryTarballUri } from '@verdaccio/tarball';\nimport { Config, RemoteUser, Version } from '@verdaccio/types';\nimport { formatAuthor, generateGravatarUrl } from '@verdaccio/utils';\n\nimport { sortByName } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nconst getOrder = (order = 'asc') => {\n return order === 'asc';\n};\n\nconst debug = buildDebug('verdaccio:web:api:package');\n\nfunction addPackageWebApi(storage: Storage, auth: Auth, config: Config): Router {\n const isLoginEnabled = config?.web?.login === true ?? true;\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const anonymousRemoteUser: RemoteUser = {\n name: undefined,\n real_groups: [],\n groups: [],\n };\n\n debug('initialized package web api');\n const checkAllow = (name: string, remoteUser: RemoteUser): Promise<boolean> =>\n new Promise((resolve, reject): void => {\n debug('is login disabled %o', isLoginEnabled);\n // FIXME: this logic does not work, review\n // const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;\n try {\n auth.allow_access({ packageName: name }, remoteUser, (err, allowed): void => {\n if (err) {\n resolve(false);\n }\n return resolve(allowed as boolean);\n });\n } catch (err: any) {\n reject(err);\n }\n });\n\n async function processPackages(packages: Version[] = [], req): Promise<Version[]> {\n const permissions: Version[] = [];\n const packagesToProcess = packages.slice();\n debug('process packages %o', packagesToProcess);\n for (const pkg of packagesToProcess) {\n const pkgCopy = { ...pkg };\n pkgCopy.author = formatAuthor(pkg.author);\n try {\n if (await checkAllow(pkg.name, req.remote_user)) {\n if (config.web) {\n // @ts-ignore\n pkgCopy.author.avatar = generateGravatarUrl(pkgCopy.author.email, config.web.gravatar);\n }\n // convert any remote dist to a local reference\n // eg: if the dist points to npmjs, switch to localhost:4873/prefix/etc.tar.gz\n if (!_.isNil(pkgCopy.dist) && !_.isNull(pkgCopy.dist.tarball)) {\n pkgCopy.dist.tarball = getLocalRegistryTarballUri(\n pkgCopy.dist.tarball,\n pkg.name,\n { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\n config?.url_prefix\n );\n }\n permissions.push(pkgCopy);\n }\n } catch (err: any) {\n debug('process packages error %o', err);\n logger.error(\n { name: pkg.name, error: err },\n 'permission process for @{name} has failed: @{error}'\n );\n throw err;\n }\n }\n\n return permissions;\n }\n\n // Get list of all visible package\n pkgRouter.get(\n '/packages',\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('hit package web api %o');\n\n try {\n const localPackages: Version[] = await storage.getLocalDatabase();\n\n const order = getOrder(config?.web?.sort_packages);\n debug('order %o', order);\n const pkgs = await processPackages(localPackages, req);\n next(sortByName(pkgs, order));\n } catch (error: any) {\n next(error);\n }\n }\n );\n\n return pkgRouter;\n}\n\nexport default addPackageWebApi;\n"],"mappings":"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"}
|
package/build/api/readme.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { Storage } from '@verdaccio/store';
|
|
|
5
5
|
import { Manifest } from '@verdaccio/types';
|
|
6
6
|
import { AuthorAvatar } from '../utils/web-utils';
|
|
7
7
|
export { $RequestExtend, $ResponseExtend, $NextFunctionVer };
|
|
8
|
-
export
|
|
8
|
+
export type PackageExt = Manifest & {
|
|
9
9
|
author: AuthorAvatar;
|
|
10
10
|
dist?: {
|
|
11
11
|
tarball: string;
|
package/build/api/readme.js
CHANGED
|
@@ -22,40 +22,29 @@ Object.defineProperty(exports, "$ResponseExtend", {
|
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
exports.default = exports.NOT_README_FOUND = void 0;
|
|
25
|
-
|
|
26
25
|
var _debug = _interopRequireDefault(require("debug"));
|
|
27
|
-
|
|
28
26
|
var _express = require("express");
|
|
29
|
-
|
|
30
27
|
var _core = require("@verdaccio/core");
|
|
31
|
-
|
|
32
28
|
var _middleware = require("@verdaccio/middleware");
|
|
33
|
-
|
|
34
29
|
var _webUtils = require("../utils/web-utils");
|
|
35
|
-
|
|
36
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
|
-
|
|
38
31
|
const NOT_README_FOUND = 'ERROR: No README data found!';
|
|
39
32
|
exports.NOT_README_FOUND = NOT_README_FOUND;
|
|
40
33
|
const debug = (0, _debug.default)('verdaccio:web:api:readme');
|
|
41
|
-
|
|
42
34
|
const getReadme = readme => {
|
|
43
35
|
if (typeof readme === 'string' && readme.length === 0) {
|
|
44
36
|
return NOT_README_FOUND;
|
|
45
37
|
}
|
|
46
|
-
|
|
47
38
|
if (typeof readme !== 'string') {
|
|
48
39
|
return NOT_README_FOUND;
|
|
49
40
|
} else {
|
|
50
41
|
return readme;
|
|
51
42
|
}
|
|
52
43
|
};
|
|
53
|
-
|
|
54
44
|
function addReadmeWebApi(storage, auth) {
|
|
55
45
|
debug('initialized readme web api');
|
|
56
46
|
const can = (0, _middleware.allow)(auth);
|
|
57
|
-
const pkgRouter = (0, _express.Router)();
|
|
58
|
-
/* eslint new-cap: 0 */
|
|
47
|
+
const pkgRouter = (0, _express.Router)(); /* eslint new-cap: 0 */
|
|
59
48
|
|
|
60
49
|
pkgRouter.get('/package/readme/(@:scope/)?:package/:version?', can('access'), async function (req, res, next) {
|
|
61
50
|
debug('readme hit');
|
|
@@ -68,7 +57,6 @@ function addReadmeWebApi(storage, auth) {
|
|
|
68
57
|
host: req.host,
|
|
69
58
|
remoteAddress: req.socket.remoteAddress
|
|
70
59
|
};
|
|
71
|
-
|
|
72
60
|
try {
|
|
73
61
|
const manifest = await storage.getPackageByOptions({
|
|
74
62
|
name,
|
|
@@ -85,7 +73,6 @@ function addReadmeWebApi(storage, auth) {
|
|
|
85
73
|
});
|
|
86
74
|
return pkgRouter;
|
|
87
75
|
}
|
|
88
|
-
|
|
89
76
|
var _default = addReadmeWebApi;
|
|
90
77
|
exports.default = _default;
|
|
91
78
|
//# sourceMappingURL=readme.js.map
|
package/build/api/readme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.js","names":["NOT_README_FOUND","debug","buildDebug","getReadme","readme","length","addReadmeWebApi","storage","auth","can","allow","pkgRouter","Router","get","req","res","next","name","params","scope","addScope","package","requestOptions","protocol","headers","host","remoteAddress","socket","manifest","getPackageByOptions","uplinksLook","abbreviated","set","HEADER_TYPE","CONTENT_TYPE","HEADERS","TEXT_PLAIN_UTF8","err"],"sources":["../../src/api/readme.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { Auth } from '@verdaccio/auth';\nimport { HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { Manifest } from '@verdaccio/types';\n\nimport { AuthorAvatar, addScope } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\n// TODO: review this type, should be on @verdacid/types\nexport type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } };\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\nconst debug = buildDebug('verdaccio:web:api:readme');\nconst getReadme = (readme) => {\n if (typeof readme === 'string' && readme.length === 0) {\n return NOT_README_FOUND;\n }\n if (typeof readme !== 'string') {\n return NOT_README_FOUND;\n } else {\n return readme;\n }\n};\n\nfunction addReadmeWebApi(storage: Storage, auth: Auth): Router {\n debug('initialized readme web api');\n const can = allow(auth);\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n\n pkgRouter.get(\n '/package/readme/(@:scope/)?:package/:version?',\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('readme hit');\n const name = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n debug('readme name %o', name);\n const requestOptions = {\n protocol: req.protocol,\n headers: req.headers as any,\n // FIXME: if we migrate to req.hostname, the port is not longer included.\n host: req.host,\n remoteAddress: req.socket.remoteAddress,\n };\n try {\n const manifest = (await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n abbreviated: false,\n requestOptions,\n })) as Manifest;\n debug('readme pkg %o', manifest?.name);\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n next(getReadme(manifest.readme));\n } catch (err) {\n next(err);\n }\n }\n );\n return pkgRouter;\n}\n\nexport default addReadmeWebApi;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"readme.js","names":["NOT_README_FOUND","debug","buildDebug","getReadme","readme","length","addReadmeWebApi","storage","auth","can","allow","pkgRouter","Router","get","req","res","next","name","params","scope","addScope","package","requestOptions","protocol","headers","host","remoteAddress","socket","manifest","getPackageByOptions","uplinksLook","abbreviated","set","HEADER_TYPE","CONTENT_TYPE","HEADERS","TEXT_PLAIN_UTF8","err"],"sources":["../../src/api/readme.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { Auth } from '@verdaccio/auth';\nimport { HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { Manifest } from '@verdaccio/types';\n\nimport { AuthorAvatar, addScope } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\n// TODO: review this type, should be on @verdacid/types\nexport type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } };\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\nconst debug = buildDebug('verdaccio:web:api:readme');\nconst getReadme = (readme) => {\n if (typeof readme === 'string' && readme.length === 0) {\n return NOT_README_FOUND;\n }\n if (typeof readme !== 'string') {\n return NOT_README_FOUND;\n } else {\n return readme;\n }\n};\n\nfunction addReadmeWebApi(storage: Storage, auth: Auth): Router {\n debug('initialized readme web api');\n const can = allow(auth);\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n\n pkgRouter.get(\n '/package/readme/(@:scope/)?:package/:version?',\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('readme hit');\n const name = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n debug('readme name %o', name);\n const requestOptions = {\n protocol: req.protocol,\n headers: req.headers as any,\n // FIXME: if we migrate to req.hostname, the port is not longer included.\n host: req.host,\n remoteAddress: req.socket.remoteAddress,\n };\n try {\n const manifest = (await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n abbreviated: false,\n requestOptions,\n })) as Manifest;\n debug('readme pkg %o', manifest?.name);\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n next(getReadme(manifest.readme));\n } catch (err) {\n next(err);\n }\n }\n );\n return pkgRouter;\n}\n\nexport default addReadmeWebApi;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAGA;AACA;AAIA;AAA4D;AAMrD,MAAMA,gBAAgB,GAAG,8BAA8B;AAAC;AAC/D,MAAMC,KAAK,GAAG,IAAAC,cAAU,EAAC,0BAA0B,CAAC;AACpD,MAAMC,SAAS,GAAIC,MAAM,IAAK;EAC5B,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAIA,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IACrD,OAAOL,gBAAgB;EACzB;EACA,IAAI,OAAOI,MAAM,KAAK,QAAQ,EAAE;IAC9B,OAAOJ,gBAAgB;EACzB,CAAC,MAAM;IACL,OAAOI,MAAM;EACf;AACF,CAAC;AAED,SAASE,eAAe,CAACC,OAAgB,EAAEC,IAAU,EAAU;EAC7DP,KAAK,CAAC,4BAA4B,CAAC;EACnC,MAAMQ,GAAG,GAAG,IAAAC,iBAAK,EAACF,IAAI,CAAC;EACvB,MAAMG,SAAS,GAAG,IAAAC,eAAM,GAAE,CAAC,CAAC;;EAE5BD,SAAS,CAACE,GAAG,CACX,+CAA+C,EAC/CJ,GAAG,CAAC,QAAQ,CAAC,EACb,gBACEK,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EACP;IACff,KAAK,CAAC,YAAY,CAAC;IACnB,MAAMgB,IAAI,GAAGH,GAAG,CAACI,MAAM,CAACC,KAAK,GACzB,IAAAC,kBAAQ,EAACN,GAAG,CAACI,MAAM,CAACC,KAAK,EAAEL,GAAG,CAACI,MAAM,CAACG,OAAO,CAAC,GAC9CP,GAAG,CAACI,MAAM,CAACG,OAAO;IACtBpB,KAAK,CAAC,gBAAgB,EAAEgB,IAAI,CAAC;IAC7B,MAAMK,cAAc,GAAG;MACrBC,QAAQ,EAAET,GAAG,CAACS,QAAQ;MACtBC,OAAO,EAAEV,GAAG,CAACU,OAAc;MAC3B;MACAC,IAAI,EAAEX,GAAG,CAACW,IAAI;MACdC,aAAa,EAAEZ,GAAG,CAACa,MAAM,CAACD;IAC5B,CAAC;IACD,IAAI;MACF,MAAME,QAAQ,GAAI,MAAMrB,OAAO,CAACsB,mBAAmB,CAAC;QAClDZ,IAAI;QACJa,WAAW,EAAE,IAAI;QACjBC,WAAW,EAAE,KAAK;QAClBT;MACF,CAAC,CAAc;MACfrB,KAAK,CAAC,eAAe,EAAE2B,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEX,IAAI,CAAC;MACtCF,GAAG,CAACiB,GAAG,CAACC,iBAAW,CAACC,YAAY,EAAEC,aAAO,CAACC,eAAe,CAAC;MAC1DpB,IAAI,CAACb,SAAS,CAACyB,QAAQ,CAACxB,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,OAAOiC,GAAG,EAAE;MACZrB,IAAI,CAACqB,GAAG,CAAC;IACX;EACF,CAAC,CACF;EACD,OAAO1B,SAAS;AAClB;AAAC,eAEcL,eAAe;AAAA"}
|
package/build/api/search.js
CHANGED
|
@@ -4,25 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
-
|
|
10
8
|
var _express = require("express");
|
|
11
|
-
|
|
12
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
10
|
var _url = require("url");
|
|
15
|
-
|
|
16
11
|
var _core = require("@verdaccio/core");
|
|
17
|
-
|
|
18
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
13
|
const debug = (0, _debug.default)('verdaccio:web:api:search');
|
|
21
|
-
|
|
22
14
|
function checkAccess(pkg, auth, remoteUser) {
|
|
23
15
|
return new Promise((resolve, reject) => {
|
|
24
16
|
var _pkg$package;
|
|
25
|
-
|
|
26
17
|
auth.allow_access({
|
|
27
18
|
packageName: pkg === null || pkg === void 0 ? void 0 : (_pkg$package = pkg.package) === null || _pkg$package === void 0 ? void 0 : _pkg$package.name
|
|
28
19
|
}, remoteUser, function (err, allowed) {
|
|
@@ -41,11 +32,8 @@ function checkAccess(pkg, auth, remoteUser) {
|
|
|
41
32
|
});
|
|
42
33
|
});
|
|
43
34
|
}
|
|
44
|
-
|
|
45
35
|
function addSearchWebApi(storage, auth) {
|
|
46
|
-
const router = (0, _express.Router)();
|
|
47
|
-
/* eslint new-cap: 0 */
|
|
48
|
-
|
|
36
|
+
const router = (0, _express.Router)(); /* eslint new-cap: 0 */
|
|
49
37
|
router.get('/search/:anything', async function (req, res, next) {
|
|
50
38
|
try {
|
|
51
39
|
let data;
|
|
@@ -54,9 +42,9 @@ function addSearchWebApi(storage, auth) {
|
|
|
54
42
|
debug('search web aborted');
|
|
55
43
|
abort.abort();
|
|
56
44
|
});
|
|
57
|
-
const text = req.params.anything ?? '';
|
|
45
|
+
const text = req.params.anything ?? '';
|
|
46
|
+
// These values are declared as optimal by npm cli
|
|
58
47
|
// FUTURE: could be overwritten by ui settings.
|
|
59
|
-
|
|
60
48
|
const size = 20;
|
|
61
49
|
const from = 0;
|
|
62
50
|
const query = {
|
|
@@ -66,8 +54,8 @@ function addSearchWebApi(storage, auth) {
|
|
|
66
54
|
quality: 0.65,
|
|
67
55
|
size: 20,
|
|
68
56
|
text
|
|
69
|
-
};
|
|
70
|
-
|
|
57
|
+
};
|
|
58
|
+
// @ts-ignore
|
|
71
59
|
const urlParams = new _url.URLSearchParams(query);
|
|
72
60
|
debug('search web init');
|
|
73
61
|
data = await (storage === null || storage === void 0 ? void 0 : storage.search({
|
|
@@ -86,7 +74,6 @@ function addSearchWebApi(storage, auth) {
|
|
|
86
74
|
});
|
|
87
75
|
return router;
|
|
88
76
|
}
|
|
89
|
-
|
|
90
77
|
var _default = addSearchWebApi;
|
|
91
78
|
exports.default = _default;
|
|
92
79
|
//# sourceMappingURL=search.js.map
|
package/build/api/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","names":["debug","buildDebug","checkAccess","pkg","auth","remoteUser","Promise","resolve","reject","allow_access","packageName","package","name","err","allowed","status","String","match","addSearchWebApi","storage","router","Router","get","req","res","next","data","abort","AbortController","socket","on","text","params","anything","size","from","query","maintenance","popularity","quality","urlParams","URLSearchParams","search","url","toString","checkAccessPromises","all","map","pkgItem","remote_user","final","filter","i","_","isNull","slice","errorUtils","getInternalError","message"],"sources":["../../src/api/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\nimport { URLSearchParams } from 'url';\n\nimport { Auth } from '@verdaccio/auth';\nimport { errorUtils, searchUtils } from '@verdaccio/core';\nimport { SearchQuery } from '@verdaccio/core/src/search-utils';\nimport { Storage } from '@verdaccio/store';\nimport { Manifest } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:search');\n\nfunction checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n allowed = false;\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n}\n\nfunction addSearchWebApi(storage: Storage, auth: Auth): Router {\n const router = Router(); /* eslint new-cap: 0 */\n router.get(\n '/search/:anything',\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n try {\n let data;\n const abort = new AbortController();\n req.socket.on('close', function () {\n debug('search web aborted');\n abort.abort();\n });\n const text: string = (req.params.anything as string) ?? '';\n // These values are declared as optimal by npm cli\n // FUTURE: could be overwritten by ui settings.\n const size = 20;\n const from = 0;\n const query: SearchQuery = {\n from: 0,\n maintenance: 0.5,\n popularity: 0.98,\n quality: 0.65,\n size: 20,\n text,\n };\n // @ts-ignore\n const urlParams = new URLSearchParams(query);\n debug('search web init');\n data = await storage?.search({\n query,\n url: `/-/v1/search?${urlParams.toString()}`,\n abort,\n });\n const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final: searchUtils.SearchItemPkg[] = checkAccessPromises\n .filter((i) => !_.isNull(i))\n .slice(from, size);\n\n next(final);\n } catch (err: any) {\n next(errorUtils.getInternalError(err.message));\n }\n }\n );\n return router;\n}\n\nexport default addSearchWebApi;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.js","names":["debug","buildDebug","checkAccess","pkg","auth","remoteUser","Promise","resolve","reject","allow_access","packageName","package","name","err","allowed","status","String","match","addSearchWebApi","storage","router","Router","get","req","res","next","data","abort","AbortController","socket","on","text","params","anything","size","from","query","maintenance","popularity","quality","urlParams","URLSearchParams","search","url","toString","checkAccessPromises","all","map","pkgItem","remote_user","final","filter","i","_","isNull","slice","errorUtils","getInternalError","message"],"sources":["../../src/api/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\nimport { URLSearchParams } from 'url';\n\nimport { Auth } from '@verdaccio/auth';\nimport { errorUtils, searchUtils } from '@verdaccio/core';\nimport { SearchQuery } from '@verdaccio/core/src/search-utils';\nimport { Storage } from '@verdaccio/store';\nimport { Manifest } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:search');\n\nfunction checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n allowed = false;\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n}\n\nfunction addSearchWebApi(storage: Storage, auth: Auth): Router {\n const router = Router(); /* eslint new-cap: 0 */\n router.get(\n '/search/:anything',\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n try {\n let data;\n const abort = new AbortController();\n req.socket.on('close', function () {\n debug('search web aborted');\n abort.abort();\n });\n const text: string = (req.params.anything as string) ?? '';\n // These values are declared as optimal by npm cli\n // FUTURE: could be overwritten by ui settings.\n const size = 20;\n const from = 0;\n const query: SearchQuery = {\n from: 0,\n maintenance: 0.5,\n popularity: 0.98,\n quality: 0.65,\n size: 20,\n text,\n };\n // @ts-ignore\n const urlParams = new URLSearchParams(query);\n debug('search web init');\n data = await storage?.search({\n query,\n url: `/-/v1/search?${urlParams.toString()}`,\n abort,\n });\n const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final: searchUtils.SearchItemPkg[] = checkAccessPromises\n .filter((i) => !_.isNull(i))\n .slice(from, size);\n\n next(final);\n } catch (err: any) {\n next(errorUtils.getInternalError(err.message));\n }\n }\n );\n return router;\n}\n\nexport default addSearchWebApi;\n"],"mappings":"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"}
|
package/build/api/sidebar.d.ts
CHANGED
|
@@ -5,13 +5,13 @@ import { Storage } from '@verdaccio/store';
|
|
|
5
5
|
import { Config, Manifest, Version } from '@verdaccio/types';
|
|
6
6
|
import { AuthorAvatar } from '../utils/web-utils';
|
|
7
7
|
export { $RequestExtend, $ResponseExtend, $NextFunctionVer };
|
|
8
|
-
export
|
|
8
|
+
export type PackageExt = Manifest & {
|
|
9
9
|
author: AuthorAvatar;
|
|
10
10
|
dist?: {
|
|
11
11
|
tarball: string;
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
|
-
export
|
|
14
|
+
export type $SidebarPackage = Manifest & {
|
|
15
15
|
latest: Version;
|
|
16
16
|
};
|
|
17
17
|
declare function addSidebarWebApi(config: Config, storage: Storage, auth: Auth): Router;
|
package/build/api/sidebar.js
CHANGED
|
@@ -22,32 +22,20 @@ Object.defineProperty(exports, "$ResponseExtend", {
|
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
exports.default = void 0;
|
|
25
|
-
|
|
26
25
|
var _debug = _interopRequireDefault(require("debug"));
|
|
27
|
-
|
|
28
26
|
var _express = require("express");
|
|
29
|
-
|
|
30
27
|
var _core = require("@verdaccio/core");
|
|
31
|
-
|
|
32
28
|
var _middleware = require("@verdaccio/middleware");
|
|
33
|
-
|
|
34
29
|
var _tarball = require("@verdaccio/tarball");
|
|
35
|
-
|
|
36
30
|
var _utils = require("@verdaccio/utils");
|
|
37
|
-
|
|
38
31
|
var _webUtils = require("../utils/web-utils");
|
|
39
|
-
|
|
40
32
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
|
-
|
|
42
33
|
const debug = (0, _debug.default)('verdaccio:web:api:sidebar');
|
|
43
|
-
|
|
44
34
|
function addSidebarWebApi(config, storage, auth) {
|
|
45
35
|
debug('initialized sidebar web api');
|
|
46
|
-
const router = (0, _express.Router)();
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const can = (0, _middleware.allow)(auth); // Get package readme
|
|
50
|
-
|
|
36
|
+
const router = (0, _express.Router)(); /* eslint new-cap: 0 */
|
|
37
|
+
const can = (0, _middleware.allow)(auth);
|
|
38
|
+
// Get package readme
|
|
51
39
|
router.get('/sidebar/(@:scope/)?:package', can('access'), async function (req, res, next) {
|
|
52
40
|
const name = req.params.scope ? (0, _webUtils.addScope)(req.params.scope, req.params.package) : req.params.package;
|
|
53
41
|
const requestOptions = {
|
|
@@ -57,7 +45,6 @@ function addSidebarWebApi(config, storage, auth) {
|
|
|
57
45
|
host: req.host,
|
|
58
46
|
remoteAddress: req.socket.remoteAddress
|
|
59
47
|
};
|
|
60
|
-
|
|
61
48
|
try {
|
|
62
49
|
const info = await storage.getPackageByOptions({
|
|
63
50
|
name,
|
|
@@ -68,26 +55,26 @@ function addSidebarWebApi(config, storage, auth) {
|
|
|
68
55
|
const {
|
|
69
56
|
v
|
|
70
57
|
} = req.query;
|
|
71
|
-
let sideBarInfo = {
|
|
58
|
+
let sideBarInfo = {
|
|
59
|
+
...info
|
|
72
60
|
};
|
|
73
61
|
sideBarInfo.versions = (0, _tarball.convertDistRemoteToLocalTarballUrls)(info, {
|
|
74
62
|
protocol: req.protocol,
|
|
75
63
|
headers: req.headers,
|
|
76
64
|
host: req.hostname
|
|
77
|
-
}, config.url_prefix).versions;
|
|
78
|
-
|
|
65
|
+
}, config.url_prefix).versions;
|
|
66
|
+
// TODO: review this implementation
|
|
79
67
|
if (typeof v === 'string' && (0, _utils.isVersionValid)(info, v)) {
|
|
80
68
|
// @ts-ignore
|
|
81
|
-
sideBarInfo.latest = sideBarInfo.versions[v];
|
|
82
|
-
|
|
69
|
+
sideBarInfo.latest = sideBarInfo.versions[v];
|
|
70
|
+
// @ts-ignore
|
|
83
71
|
sideBarInfo.latest.author = (0, _utils.formatAuthor)(sideBarInfo.latest.author);
|
|
84
72
|
} else {
|
|
85
73
|
// @ts-ignore
|
|
86
|
-
sideBarInfo.latest = sideBarInfo.versions[info[_core.DIST_TAGS].latest];
|
|
87
|
-
|
|
74
|
+
sideBarInfo.latest = sideBarInfo.versions[info[_core.DIST_TAGS].latest];
|
|
75
|
+
// @ts-ignore
|
|
88
76
|
sideBarInfo.latest.author = (0, _utils.formatAuthor)(sideBarInfo.latest.author);
|
|
89
77
|
}
|
|
90
|
-
|
|
91
78
|
sideBarInfo = (0, _webUtils.deleteProperties)(['readme', '_attachments', '_rev', 'name'], sideBarInfo);
|
|
92
79
|
const authorAvatar = config.web ? (0, _utils.addGravatarSupport)(sideBarInfo, config.web.gravatar) : (0, _utils.addGravatarSupport)(sideBarInfo);
|
|
93
80
|
next(authorAvatar);
|
|
@@ -98,7 +85,6 @@ function addSidebarWebApi(config, storage, auth) {
|
|
|
98
85
|
});
|
|
99
86
|
return router;
|
|
100
87
|
}
|
|
101
|
-
|
|
102
88
|
var _default = addSidebarWebApi;
|
|
103
89
|
exports.default = _default;
|
|
104
90
|
//# sourceMappingURL=sidebar.js.map
|
package/build/api/sidebar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","names":["debug","buildDebug","addSidebarWebApi","config","storage","auth","router","Router","can","allow","get","req","res","next","name","params","scope","addScope","package","requestOptions","protocol","headers","host","remoteAddress","socket","info","getPackageByOptions","uplinksLook","keepUpLinkData","v","query","sideBarInfo","versions","convertDistRemoteToLocalTarballUrls","hostname","url_prefix","isVersionValid","latest","author","formatAuthor","DIST_TAGS","deleteProperties","authorAvatar","web","addGravatarSupport","gravatar","err","status","HTTP_STATUS","NOT_FOUND","end"],"sources":["../../src/api/sidebar.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { Auth } from '@verdaccio/auth';\nimport { DIST_TAGS, HTTP_STATUS } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { convertDistRemoteToLocalTarballUrls } from '@verdaccio/tarball';\nimport { Config, Manifest, Version } from '@verdaccio/types';\nimport { addGravatarSupport, formatAuthor, isVersionValid } from '@verdaccio/utils';\n\nimport { AuthorAvatar, addScope, deleteProperties } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } };\n\nexport type $SidebarPackage = Manifest & { latest: Version };\nconst debug = buildDebug('verdaccio:web:api:sidebar');\n\nfunction addSidebarWebApi(config: Config, storage: Storage, auth: Auth): Router {\n debug('initialized sidebar web api');\n const router = Router(); /* eslint new-cap: 0 */\n const can = allow(auth);\n // Get package readme\n router.get(\n '/sidebar/(@:scope/)?:package',\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const name: string = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n const requestOptions = {\n protocol: req.protocol,\n headers: req.headers as any,\n // FIXME: if we migrate to req.hostname, the port is not longer included.\n host: req.host,\n remoteAddress: req.socket.remoteAddress,\n };\n try {\n const info = (await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n keepUpLinkData: true,\n requestOptions,\n })) as Manifest;\n const { v } = req.query;\n let sideBarInfo = { ...info };\n sideBarInfo.versions = convertDistRemoteToLocalTarballUrls(\n info,\n { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\n config.url_prefix\n ).versions;\n // TODO: review this implementation\n if (typeof v === 'string' && isVersionValid(info, v)) {\n // @ts-ignore\n sideBarInfo.latest = sideBarInfo.versions[v];\n // @ts-ignore\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n } else {\n // @ts-ignore\n sideBarInfo.latest = sideBarInfo.versions[info[DIST_TAGS].latest];\n // @ts-ignore\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n }\n sideBarInfo = deleteProperties(['readme', '_attachments', '_rev', 'name'], sideBarInfo);\n const authorAvatar = config.web\n ? addGravatarSupport(sideBarInfo, config.web.gravatar)\n : addGravatarSupport(sideBarInfo);\n next(authorAvatar);\n } catch (err) {\n res.status(HTTP_STATUS.NOT_FOUND);\n res.end();\n }\n }\n );\n\n return router;\n}\n\nexport default addSidebarWebApi;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidebar.js","names":["debug","buildDebug","addSidebarWebApi","config","storage","auth","router","Router","can","allow","get","req","res","next","name","params","scope","addScope","package","requestOptions","protocol","headers","host","remoteAddress","socket","info","getPackageByOptions","uplinksLook","keepUpLinkData","v","query","sideBarInfo","versions","convertDistRemoteToLocalTarballUrls","hostname","url_prefix","isVersionValid","latest","author","formatAuthor","DIST_TAGS","deleteProperties","authorAvatar","web","addGravatarSupport","gravatar","err","status","HTTP_STATUS","NOT_FOUND","end"],"sources":["../../src/api/sidebar.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { Auth } from '@verdaccio/auth';\nimport { DIST_TAGS, HTTP_STATUS } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { convertDistRemoteToLocalTarballUrls } from '@verdaccio/tarball';\nimport { Config, Manifest, Version } from '@verdaccio/types';\nimport { addGravatarSupport, formatAuthor, isVersionValid } from '@verdaccio/utils';\n\nimport { AuthorAvatar, addScope, deleteProperties } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } };\n\nexport type $SidebarPackage = Manifest & { latest: Version };\nconst debug = buildDebug('verdaccio:web:api:sidebar');\n\nfunction addSidebarWebApi(config: Config, storage: Storage, auth: Auth): Router {\n debug('initialized sidebar web api');\n const router = Router(); /* eslint new-cap: 0 */\n const can = allow(auth);\n // Get package readme\n router.get(\n '/sidebar/(@:scope/)?:package',\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const name: string = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n const requestOptions = {\n protocol: req.protocol,\n headers: req.headers as any,\n // FIXME: if we migrate to req.hostname, the port is not longer included.\n host: req.host,\n remoteAddress: req.socket.remoteAddress,\n };\n try {\n const info = (await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n keepUpLinkData: true,\n requestOptions,\n })) as Manifest;\n const { v } = req.query;\n let sideBarInfo = { ...info };\n sideBarInfo.versions = convertDistRemoteToLocalTarballUrls(\n info,\n { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\n config.url_prefix\n ).versions;\n // TODO: review this implementation\n if (typeof v === 'string' && isVersionValid(info, v)) {\n // @ts-ignore\n sideBarInfo.latest = sideBarInfo.versions[v];\n // @ts-ignore\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n } else {\n // @ts-ignore\n sideBarInfo.latest = sideBarInfo.versions[info[DIST_TAGS].latest];\n // @ts-ignore\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n }\n sideBarInfo = deleteProperties(['readme', '_attachments', '_rev', 'name'], sideBarInfo);\n const authorAvatar = config.web\n ? addGravatarSupport(sideBarInfo, config.web.gravatar)\n : addGravatarSupport(sideBarInfo);\n next(authorAvatar);\n } catch (err) {\n res.status(HTTP_STATUS.NOT_FOUND);\n res.end();\n }\n }\n );\n\n return router;\n}\n\nexport default addSidebarWebApi;\n"],"mappings":"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"}
|