@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 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
@@ -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
@@ -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":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;eAEe,CAACA,IAAD,EAAOC,OAAP,EAAgBC,MAAhB,KAA2B;EACxC,MAAMC,KAAK,GAAG,IAAAC,eAAA,GAAd;EAAwB;;EACxBD,KAAK,CAACE,GAAN,CAAU,QAAV,EAAoB,IAAAC,gBAAA,EAAWL,OAAX,EAAoBD,IAApB,EAA0BE,MAA1B,CAApB;EACAC,KAAK,CAACE,GAAN,CAAU,QAAV,EAAoB,IAAAE,eAAA,EAAON,OAAP,EAAgBD,IAAhB,CAApB;EACAG,KAAK,CAACE,GAAN,CAAU,QAAV,EAAoB,IAAAG,gBAAA,EAAQN,MAAR,EAAgBD,OAAhB,EAAyBD,IAAzB,CAApB;EACAG,KAAK,CAACE,GAAN,CAAU,QAAV,EAAoB,IAAAI,eAAA,EAAOR,OAAP,EAAgBD,IAAhB,CAApB;;EACA,IAAI,IAAAU,kBAAA,EAASR,MAAT,CAAJ,EAAsB;IACpBC,KAAK,CAACE,GAAN,CAAU,OAAV,EAAmB,IAAAM,aAAA,EAAKX,IAAL,EAAWE,MAAX,CAAnB;EACD;;EACD,OAAOC,KAAP;AACD,C"}
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"}
@@ -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); // FIXME: this logic does not work, review
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 = { ...pkg
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
- } // convert any remote dist to a local reference
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
- } // Get list of all visible package
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
@@ -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":"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"}
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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"}
@@ -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 declare type PackageExt = Manifest & {
8
+ export type PackageExt = Manifest & {
9
9
  author: AuthorAvatar;
10
10
  dist?: {
11
11
  tarball: string;
@@ -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
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAGA;;AACA;;AAIA;;;;AAMO,MAAMA,gBAAgB,GAAG,8BAAzB;;AACP,MAAMC,KAAK,GAAG,IAAAC,cAAA,EAAW,0BAAX,CAAd;;AACA,MAAMC,SAAS,GAAIC,MAAD,IAAY;EAC5B,IAAI,OAAOA,MAAP,KAAkB,QAAlB,IAA8BA,MAAM,CAACC,MAAP,KAAkB,CAApD,EAAuD;IACrD,OAAOL,gBAAP;EACD;;EACD,IAAI,OAAOI,MAAP,KAAkB,QAAtB,EAAgC;IAC9B,OAAOJ,gBAAP;EACD,CAFD,MAEO;IACL,OAAOI,MAAP;EACD;AACF,CATD;;AAWA,SAASE,eAAT,CAAyBC,OAAzB,EAA2CC,IAA3C,EAA+D;EAC7DP,KAAK,CAAC,4BAAD,CAAL;EACA,MAAMQ,GAAG,GAAG,IAAAC,iBAAA,EAAMF,IAAN,CAAZ;EACA,MAAMG,SAAS,GAAG,IAAAC,eAAA,GAAlB;EAA4B;;EAE5BD,SAAS,CAACE,GAAV,CACE,+CADF,EAEEJ,GAAG,CAAC,QAAD,CAFL,EAGE,gBACEK,GADF,EAEEC,GAFF,EAGEC,IAHF,EAIiB;IACff,KAAK,CAAC,YAAD,CAAL;IACA,MAAMgB,IAAI,GAAGH,GAAG,CAACI,MAAJ,CAAWC,KAAX,GACT,IAAAC,kBAAA,EAASN,GAAG,CAACI,MAAJ,CAAWC,KAApB,EAA2BL,GAAG,CAACI,MAAJ,CAAWG,OAAtC,CADS,GAETP,GAAG,CAACI,MAAJ,CAAWG,OAFf;IAGApB,KAAK,CAAC,gBAAD,EAAmBgB,IAAnB,CAAL;IACA,MAAMK,cAAc,GAAG;MACrBC,QAAQ,EAAET,GAAG,CAACS,QADO;MAErBC,OAAO,EAAEV,GAAG,CAACU,OAFQ;MAGrB;MACAC,IAAI,EAAEX,GAAG,CAACW,IAJW;MAKrBC,aAAa,EAAEZ,GAAG,CAACa,MAAJ,CAAWD;IALL,CAAvB;;IAOA,IAAI;MACF,MAAME,QAAQ,GAAI,MAAMrB,OAAO,CAACsB,mBAAR,CAA4B;QAClDZ,IADkD;QAElDa,WAAW,EAAE,IAFqC;QAGlDC,WAAW,EAAE,KAHqC;QAIlDT;MAJkD,CAA5B,CAAxB;MAMArB,KAAK,CAAC,eAAD,EAAkB2B,QAAlB,aAAkBA,QAAlB,uBAAkBA,QAAQ,CAAEX,IAA5B,CAAL;MACAF,GAAG,CAACiB,GAAJ,CAAQC,iBAAA,CAAYC,YAApB,EAAkCC,aAAA,CAAQC,eAA1C;MACApB,IAAI,CAACb,SAAS,CAACyB,QAAQ,CAACxB,MAAV,CAAV,CAAJ;IACD,CAVD,CAUE,OAAOiC,GAAP,EAAY;MACZrB,IAAI,CAACqB,GAAD,CAAJ;IACD;EACF,CAjCH;EAmCA,OAAO1B,SAAP;AACD;;eAEcL,e"}
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"}
@@ -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 ?? ''; // These values are declared as optimal by npm cli
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
- }; // @ts-ignore
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
@@ -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":"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"}
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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"}
@@ -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 declare type PackageExt = Manifest & {
8
+ export type PackageExt = Manifest & {
9
9
  author: AuthorAvatar;
10
10
  dist?: {
11
11
  tarball: string;
12
12
  };
13
13
  };
14
- export declare type $SidebarPackage = Manifest & {
14
+ export type $SidebarPackage = Manifest & {
15
15
  latest: Version;
16
16
  };
17
17
  declare function addSidebarWebApi(config: Config, storage: Storage, auth: Auth): Router;
@@ -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
- /* eslint new-cap: 0 */
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 = { ...info
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; // TODO: review this implementation
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]; // @ts-ignore
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]; // @ts-ignore
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
@@ -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":"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"}
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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"}