@verdaccio/server 6.0.0-6-next.47 → 6.0.0-6-next.49

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,43 @@
1
1
  # @verdaccio/server
2
2
 
3
+ ## 6.0.0-6-next.49
4
+
5
+ ### Minor Changes
6
+
7
+ - 45c03819: refactor: render html middleware
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [45c03819]
12
+ - @verdaccio/api@6.0.0-6-next.43
13
+ - @verdaccio/config@6.0.0-6-next.60
14
+ - @verdaccio/middleware@6.0.0-6-next.39
15
+ - verdaccio-audit@11.0.0-6-next.23
16
+ - @verdaccio/store@6.0.0-6-next.40
17
+ - @verdaccio/web@6.0.0-6-next.47
18
+ - @verdaccio/auth@6.0.0-6-next.39
19
+ - @verdaccio/loaders@6.0.0-6-next.29
20
+ - @verdaccio/core@6.0.0-6-next.60
21
+ - @verdaccio/logger@6.0.0-6-next.28
22
+ - @verdaccio/utils@6.0.0-6-next.28
23
+
24
+ ## 6.0.0-6-next.48
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [65f88b82]
29
+ - @verdaccio/logger@6.0.0-6-next.27
30
+ - @verdaccio/middleware@6.0.0-6-next.38
31
+ - @verdaccio/api@6.0.0-6-next.42
32
+ - @verdaccio/auth@6.0.0-6-next.38
33
+ - @verdaccio/loaders@6.0.0-6-next.28
34
+ - verdaccio-audit@11.0.0-6-next.22
35
+ - @verdaccio/store@6.0.0-6-next.39
36
+ - @verdaccio/web@6.0.0-6-next.46
37
+ - @verdaccio/core@6.0.0-6-next.59
38
+ - @verdaccio/config@6.0.0-6-next.59
39
+ - @verdaccio/utils@6.0.0-6-next.27
40
+
3
41
  ## 6.0.0-6-next.47
4
42
 
5
43
  ### Patch Changes
package/build/server.js CHANGED
@@ -8,7 +8,6 @@ var _compression = _interopRequireDefault(require("compression"));
8
8
  var _cors = _interopRequireDefault(require("cors"));
9
9
  var _debug = _interopRequireDefault(require("debug"));
10
10
  var _express = _interopRequireDefault(require("express"));
11
- var _expressRateLimit = _interopRequireDefault(require("express-rate-limit"));
12
11
  var _lodash = _interopRequireDefault(require("lodash"));
13
12
  var _verdaccioAudit = _interopRequireDefault(require("verdaccio-audit"));
14
13
  var _api = _interopRequireDefault(require("@verdaccio/api"));
@@ -21,28 +20,23 @@ var _middleware = require("@verdaccio/middleware");
21
20
  var _store = require("@verdaccio/store");
22
21
  var _web = _interopRequireDefault(require("@verdaccio/web"));
23
22
  var _debug2 = _interopRequireDefault(require("./debug"));
24
- var _utils = require("./utils");
25
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
24
  const debug = (0, _debug.default)('verdaccio:server');
27
25
  const defineAPI = async function (config, storage) {
28
26
  const auth = new _auth.Auth(config);
29
27
  await auth.init();
30
28
  const app = (0, _express.default)();
31
- const limiter = new _expressRateLimit.default(config.serverSettings.rateLimit);
32
29
  // run in production mode by default, just in case
33
30
  // it shouldn't make any difference anyway
34
31
  app.set('env', process.env.NODE_ENV || 'production');
35
32
  app.use((0, _cors.default)());
36
- app.use(limiter);
33
+ app.use((0, _middleware.rateLimit)(config.serverSettings.rateLimit));
37
34
  const errorReportingMiddlewareWrap = (0, _middleware.errorReportingMiddleware)(_logger.logger);
38
35
 
39
36
  // Router setup
40
37
  app.use((0, _middleware.log)(_logger.logger));
41
38
  app.use(errorReportingMiddlewareWrap);
42
- app.use(function (req, res, next) {
43
- res.setHeader('x-powered-by', (0, _utils.getUserAgent)(config.user_agent));
44
- next();
45
- });
39
+ app.use((0, _middleware.userAgent)(config));
46
40
  app.use((0, _compression.default)());
47
41
  app.get('/favicon.ico', function (req, res, next) {
48
42
  req.url = '/-/static/favicon.png';
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","names":["debug","buildDebug","defineAPI","config","storage","auth","Auth","init","app","express","limiter","RateLimit","serverSettings","rateLimit","set","process","env","NODE_ENV","use","cors","errorReportingMiddlewareWrap","errorReportingMiddleware","logger","log","req","res","next","setHeader","getUserAgent","user_agent","compression","get","url","_debug","hookDebug","configPath","plugins","asyncLoadPlugin","middlewares","plugin","register_middlewares","length","info","push","AuditMiddleware","enabled","strict_ssl","forEach","apiEndpoint","_","webMiddleware","errorUtils","getNotFound","API_ERROR","WEB_DISABLED","err","isError","code","statusCode","HTTP_STATUS","NOT_MODIFIED","isFunction","locals","report_error","noop","final","startServer","configHash","AppConfig","Storage","error","msg","Error"],"sources":["../src/server.ts"],"sourcesContent":["import compression from 'compression';\nimport cors from 'cors';\nimport buildDebug from 'debug';\nimport express from 'express';\nimport RateLimit from 'express-rate-limit';\nimport { HttpError } from 'http-errors';\nimport _ from 'lodash';\nimport AuditMiddleware from 'verdaccio-audit';\n\nimport apiEndpoint from '@verdaccio/api';\nimport { Auth } from '@verdaccio/auth';\nimport { Config as AppConfig } from '@verdaccio/config';\nimport { API_ERROR, HTTP_STATUS, errorUtils, pluginUtils } from '@verdaccio/core';\nimport { asyncLoadPlugin } from '@verdaccio/loaders';\nimport { logger } from '@verdaccio/logger';\nimport { errorReportingMiddleware, final, log } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { ConfigYaml } from '@verdaccio/types';\nimport { Config as IConfig } from '@verdaccio/types';\nimport webMiddleware from '@verdaccio/web';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\nimport hookDebug from './debug';\nimport { getUserAgent } from './utils';\n\nconst debug = buildDebug('verdaccio:server');\n\nconst defineAPI = async function (config: IConfig, storage: Storage): Promise<any> {\n const auth: Auth = new Auth(config);\n await auth.init();\n const app = express();\n const limiter = new RateLimit(config.serverSettings.rateLimit);\n // run in production mode by default, just in case\n // it shouldn't make any difference anyway\n app.set('env', process.env.NODE_ENV || 'production');\n app.use(cors());\n app.use(limiter);\n\n const errorReportingMiddlewareWrap = errorReportingMiddleware(logger);\n\n // Router setup\n app.use(log(logger));\n app.use(errorReportingMiddlewareWrap);\n app.use(function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n res.setHeader('x-powered-by', getUserAgent(config.user_agent));\n next();\n });\n\n app.use(compression());\n\n app.get(\n '/favicon.ico',\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n req.url = '/-/static/favicon.png';\n next();\n }\n );\n\n // Hook for tests only\n if (config._debug) {\n hookDebug(app, config.configPath);\n }\n\n const plugins: pluginUtils.ExpressMiddleware<IConfig, {}, Auth>[] = await asyncLoadPlugin(\n config.middlewares,\n {\n config,\n logger,\n },\n function (plugin) {\n return typeof plugin.register_middlewares !== 'undefined';\n }\n );\n\n if (plugins.length === 0) {\n logger.info('none middleware plugins has been defined, adding audit middleware by default');\n // @ts-ignore\n plugins.push(new AuditMiddleware({ enabled: true, strict_ssl: true }, { config, logger }));\n }\n\n plugins.forEach((plugin: pluginUtils.ExpressMiddleware<IConfig, {}, Auth>) => {\n plugin.register_middlewares(app, auth, storage);\n });\n\n // For npm request\n // @ts-ignore\n app.use(apiEndpoint(config, auth, storage));\n\n // For WebUI & WebUI API\n if (_.get(config, 'web.enable', true)) {\n app.use(await webMiddleware(config, auth, storage));\n } else {\n app.get('/', function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n next(errorUtils.getNotFound(API_ERROR.WEB_DISABLED));\n });\n }\n\n // Catch 404\n app.get('/*', function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n next(errorUtils.getNotFound('resource not found'));\n });\n\n app.use(function (\n err: HttpError,\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ) {\n if (_.isError(err)) {\n if (err.code === 'ECONNABORT' && res.statusCode === HTTP_STATUS.NOT_MODIFIED) {\n return next();\n }\n if (_.isFunction(res.locals.report_error) === false) {\n // in case of very early error this middleware may not be loaded before error is generated\n // fixing that\n errorReportingMiddlewareWrap(req, res, _.noop);\n }\n res.locals.report_error(err);\n } else {\n // Fall to Middleware.final\n return next(err);\n }\n });\n\n app.use(final);\n\n return app;\n};\n\nexport default (async function startServer(configHash: ConfigYaml): Promise<any> {\n debug('start server');\n const config: IConfig = new AppConfig({ ...configHash } as any);\n // register middleware plugins\n debug('loaded filter plugin');\n // @ts-ignore\n const storage: Storage = new Storage(config);\n try {\n // waits until init calls have been initialized\n debug('storage init start');\n await storage.init(config);\n debug('storage init end');\n } catch (err: any) {\n logger.error({ error: err.msg }, 'storage has failed: @{error}');\n throw new Error(err);\n }\n return await defineAPI(config, storage);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.js","names":["debug","buildDebug","defineAPI","config","storage","auth","Auth","init","app","express","set","process","env","NODE_ENV","use","cors","rateLimit","serverSettings","errorReportingMiddlewareWrap","errorReportingMiddleware","logger","log","userAgent","compression","get","req","res","next","url","_debug","hookDebug","configPath","plugins","asyncLoadPlugin","middlewares","plugin","register_middlewares","length","info","push","AuditMiddleware","enabled","strict_ssl","forEach","apiEndpoint","_","webMiddleware","errorUtils","getNotFound","API_ERROR","WEB_DISABLED","err","isError","code","statusCode","HTTP_STATUS","NOT_MODIFIED","isFunction","locals","report_error","noop","final","startServer","configHash","AppConfig","Storage","error","msg","Error"],"sources":["../src/server.ts"],"sourcesContent":["import compression from 'compression';\nimport cors from 'cors';\nimport buildDebug from 'debug';\nimport express from 'express';\nimport { HttpError } from 'http-errors';\nimport _ from 'lodash';\nimport AuditMiddleware from 'verdaccio-audit';\n\nimport apiEndpoint from '@verdaccio/api';\nimport { Auth } from '@verdaccio/auth';\nimport { Config as AppConfig } from '@verdaccio/config';\nimport { API_ERROR, HTTP_STATUS, errorUtils, pluginUtils } from '@verdaccio/core';\nimport { asyncLoadPlugin } from '@verdaccio/loaders';\nimport { logger } from '@verdaccio/logger';\nimport { errorReportingMiddleware, final, log, rateLimit, userAgent } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { ConfigYaml } from '@verdaccio/types';\nimport { Config as IConfig } from '@verdaccio/types';\nimport webMiddleware from '@verdaccio/web';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\nimport hookDebug from './debug';\n\nconst debug = buildDebug('verdaccio:server');\n\nconst defineAPI = async function (config: IConfig, storage: Storage): Promise<any> {\n const auth: Auth = new Auth(config);\n await auth.init();\n const app = express();\n // run in production mode by default, just in case\n // it shouldn't make any difference anyway\n app.set('env', process.env.NODE_ENV || 'production');\n app.use(cors());\n app.use(rateLimit(config.serverSettings.rateLimit));\n\n const errorReportingMiddlewareWrap = errorReportingMiddleware(logger);\n\n // Router setup\n app.use(log(logger));\n app.use(errorReportingMiddlewareWrap);\n app.use(userAgent(config));\n app.use(compression());\n\n app.get(\n '/favicon.ico',\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n req.url = '/-/static/favicon.png';\n next();\n }\n );\n\n // Hook for tests only\n if (config._debug) {\n hookDebug(app, config.configPath);\n }\n\n const plugins: pluginUtils.ExpressMiddleware<IConfig, {}, Auth>[] = await asyncLoadPlugin(\n config.middlewares,\n {\n config,\n logger,\n },\n function (plugin) {\n return typeof plugin.register_middlewares !== 'undefined';\n }\n );\n\n if (plugins.length === 0) {\n logger.info('none middleware plugins has been defined, adding audit middleware by default');\n // @ts-ignore\n plugins.push(new AuditMiddleware({ enabled: true, strict_ssl: true }, { config, logger }));\n }\n\n plugins.forEach((plugin: pluginUtils.ExpressMiddleware<IConfig, {}, Auth>) => {\n plugin.register_middlewares(app, auth, storage);\n });\n\n // For npm request\n // @ts-ignore\n app.use(apiEndpoint(config, auth, storage));\n\n // For WebUI & WebUI API\n if (_.get(config, 'web.enable', true)) {\n app.use(await webMiddleware(config, auth, storage));\n } else {\n app.get('/', function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n next(errorUtils.getNotFound(API_ERROR.WEB_DISABLED));\n });\n }\n\n // Catch 404\n app.get('/*', function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n next(errorUtils.getNotFound('resource not found'));\n });\n\n app.use(function (\n err: HttpError,\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ) {\n if (_.isError(err)) {\n if (err.code === 'ECONNABORT' && res.statusCode === HTTP_STATUS.NOT_MODIFIED) {\n return next();\n }\n if (_.isFunction(res.locals.report_error) === false) {\n // in case of very early error this middleware may not be loaded before error is generated\n // fixing that\n errorReportingMiddlewareWrap(req, res, _.noop);\n }\n res.locals.report_error(err);\n } else {\n // Fall to Middleware.final\n return next(err);\n }\n });\n\n app.use(final);\n\n return app;\n};\n\nexport default (async function startServer(configHash: ConfigYaml): Promise<any> {\n debug('start server');\n const config: IConfig = new AppConfig({ ...configHash } as any);\n // register middleware plugins\n debug('loaded filter plugin');\n // @ts-ignore\n const storage: Storage = new Storage(config);\n try {\n // waits until init calls have been initialized\n debug('storage init start');\n await storage.init(config);\n debug('storage init end');\n } catch (err: any) {\n logger.error({ error: err.msg }, 'storage has failed: @{error}');\n throw new Error(err);\n }\n return await defineAPI(config, storage);\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/server",
3
- "version": "6.0.0-6-next.47",
3
+ "version": "6.0.0-6-next.49",
4
4
  "description": "server logic",
5
5
  "main": "./build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -30,27 +30,26 @@
30
30
  "npm": ">=6"
31
31
  },
32
32
  "dependencies": {
33
- "@verdaccio/api": "6.0.0-6-next.41",
34
- "@verdaccio/auth": "6.0.0-6-next.37",
35
- "@verdaccio/core": "6.0.0-6-next.58",
36
- "@verdaccio/config": "6.0.0-6-next.58",
37
- "@verdaccio/loaders": "6.0.0-6-next.27",
38
- "@verdaccio/logger": "6.0.0-6-next.26",
39
- "@verdaccio/middleware": "6.0.0-6-next.37",
40
- "@verdaccio/store": "6.0.0-6-next.38",
41
- "@verdaccio/utils": "6.0.0-6-next.26",
42
- "@verdaccio/web": "6.0.0-6-next.45",
43
- "verdaccio-audit": "11.0.0-6-next.21",
33
+ "@verdaccio/api": "6.0.0-6-next.43",
34
+ "@verdaccio/auth": "6.0.0-6-next.39",
35
+ "@verdaccio/core": "6.0.0-6-next.60",
36
+ "@verdaccio/config": "6.0.0-6-next.60",
37
+ "@verdaccio/loaders": "6.0.0-6-next.29",
38
+ "@verdaccio/logger": "6.0.0-6-next.28",
39
+ "@verdaccio/middleware": "6.0.0-6-next.39",
40
+ "@verdaccio/store": "6.0.0-6-next.40",
41
+ "@verdaccio/utils": "6.0.0-6-next.28",
42
+ "@verdaccio/web": "6.0.0-6-next.47",
43
+ "verdaccio-audit": "11.0.0-6-next.23",
44
44
  "compression": "1.7.4",
45
45
  "cors": "2.8.5",
46
46
  "debug": "4.3.4",
47
47
  "express": "4.18.2",
48
- "express-rate-limit": "5.5.1",
49
48
  "lodash": "4.17.21"
50
49
  },
51
50
  "devDependencies": {
52
51
  "@types/node": "16.18.10",
53
- "@verdaccio/proxy": "6.0.0-6-next.36",
52
+ "@verdaccio/proxy": "6.0.0-6-next.38",
54
53
  "@verdaccio/test-helper": "2.0.0-6-next.7",
55
54
  "http-errors": "1.8.1"
56
55
  },
package/src/server.ts CHANGED
@@ -2,7 +2,6 @@ import compression from 'compression';
2
2
  import cors from 'cors';
3
3
  import buildDebug from 'debug';
4
4
  import express from 'express';
5
- import RateLimit from 'express-rate-limit';
6
5
  import { HttpError } from 'http-errors';
7
6
  import _ from 'lodash';
8
7
  import AuditMiddleware from 'verdaccio-audit';
@@ -13,7 +12,7 @@ import { Config as AppConfig } from '@verdaccio/config';
13
12
  import { API_ERROR, HTTP_STATUS, errorUtils, pluginUtils } from '@verdaccio/core';
14
13
  import { asyncLoadPlugin } from '@verdaccio/loaders';
15
14
  import { logger } from '@verdaccio/logger';
16
- import { errorReportingMiddleware, final, log } from '@verdaccio/middleware';
15
+ import { errorReportingMiddleware, final, log, rateLimit, userAgent } from '@verdaccio/middleware';
17
16
  import { Storage } from '@verdaccio/store';
18
17
  import { ConfigYaml } from '@verdaccio/types';
19
18
  import { Config as IConfig } from '@verdaccio/types';
@@ -21,7 +20,6 @@ import webMiddleware from '@verdaccio/web';
21
20
 
22
21
  import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';
23
22
  import hookDebug from './debug';
24
- import { getUserAgent } from './utils';
25
23
 
26
24
  const debug = buildDebug('verdaccio:server');
27
25
 
@@ -29,23 +27,18 @@ const defineAPI = async function (config: IConfig, storage: Storage): Promise<an
29
27
  const auth: Auth = new Auth(config);
30
28
  await auth.init();
31
29
  const app = express();
32
- const limiter = new RateLimit(config.serverSettings.rateLimit);
33
30
  // run in production mode by default, just in case
34
31
  // it shouldn't make any difference anyway
35
32
  app.set('env', process.env.NODE_ENV || 'production');
36
33
  app.use(cors());
37
- app.use(limiter);
34
+ app.use(rateLimit(config.serverSettings.rateLimit));
38
35
 
39
36
  const errorReportingMiddlewareWrap = errorReportingMiddleware(logger);
40
37
 
41
38
  // Router setup
42
39
  app.use(log(logger));
43
40
  app.use(errorReportingMiddlewareWrap);
44
- app.use(function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
45
- res.setHeader('x-powered-by', getUserAgent(config.user_agent));
46
- next();
47
- });
48
-
41
+ app.use(userAgent(config));
49
42
  app.use(compression());
50
43
 
51
44
  app.get(
@@ -55,15 +55,15 @@ test('should contains etag', async () => {
55
55
  expect(typeof etag === 'string').toBeTruthy();
56
56
  });
57
57
 
58
- test('should contains powered by header', async () => {
58
+ test('should be hidden by default', async () => {
59
59
  const app = await initializeServer('conf.yaml');
60
60
  const response = await supertest(app)
61
61
  .get('/')
62
62
  .expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_HTML_UTF8)
63
63
  .expect(HTTP_STATUS.OK);
64
64
  const powered = response.get('x-powered-by');
65
- expect(powered).toMatch('verdaccio/6');
66
- });
65
+ expect(powered).toMatch('hidden');
66
+ }, 40000);
67
67
 
68
68
  test('should not contains powered header', async () => {
69
69
  const app = await initializeServer('powered-disabled.yaml');
package/build/utils.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function getUserAgent(userAgent: string): string;
package/build/utils.js DELETED
@@ -1,16 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getUserAgent = getUserAgent;
7
- const pkgVersion = require('../package.json').version;
8
- function getUserAgent(userAgent) {
9
- if (typeof userAgent === 'string') {
10
- return userAgent;
11
- } else if (userAgent === false) {
12
- return 'hidden';
13
- }
14
- return `verdaccio/${pkgVersion}`;
15
- }
16
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","names":["pkgVersion","require","version","getUserAgent","userAgent"],"sources":["../src/utils.ts"],"sourcesContent":["const pkgVersion = require('../package.json').version;\n\nexport function getUserAgent(userAgent: string): string {\n if (typeof userAgent === 'string') {\n return userAgent;\n } else if (userAgent === false) {\n return 'hidden';\n }\n\n return `verdaccio/${pkgVersion}`;\n}\n"],"mappings":";;;;;;AAAA,MAAMA,UAAU,GAAGC,OAAO,CAAC,iBAAiB,CAAC,CAACC,OAAO;AAE9C,SAASC,YAAY,CAACC,SAAiB,EAAU;EACtD,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;IACjC,OAAOA,SAAS;EAClB,CAAC,MAAM,IAAIA,SAAS,KAAK,KAAK,EAAE;IAC9B,OAAO,QAAQ;EACjB;EAEA,OAAQ,aAAYJ,UAAW,EAAC;AAClC"}
package/src/utils.ts DELETED
@@ -1,11 +0,0 @@
1
- const pkgVersion = require('../package.json').version;
2
-
3
- export function getUserAgent(userAgent: string): string {
4
- if (typeof userAgent === 'string') {
5
- return userAgent;
6
- } else if (userAgent === false) {
7
- return 'hidden';
8
- }
9
-
10
- return `verdaccio/${pkgVersion}`;
11
- }