serverest 2.29.3 → 2.29.4

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/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  <p align="center">
7
7
  <a href="https://npmjs.com/package/serverest"><img alt="serverest version" src="https://img.shields.io/npm/v/serverest?style=for-the-badge"></a>
8
8
  <a href="https://hub.docker.com/r/paulogoncalvesbh/serverest"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/paulogoncalvesbh/serverest?style=for-the-badge"></a>
9
- <a href="https://dashboard.stryker-mutator.io/reports/github.com/ServeRest/ServeRest/trunk"><img alt="Mutation test score" src="https://img.shields.io/endpoint?style=for-the-badge&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2FServeRest%2FServeRest%2Ftrunk"></a>
9
+ <a href="https://sonarcloud.io/summary/overall?id=ServeRest"><img alt="Sonar code coverage score" src="https://img.shields.io/sonar/coverage/ServeRest?server=https%3A%2F%2Fsonarcloud.io&style=for-the-badge"></a>
10
10
  <a href="https://npm-stat.com/charts.html?package=serverest"><img alt="serverest total downloads" src="https://img.shields.io/npm/dt/serverest?color=blue&style=for-the-badge"></a>
11
11
  </p>
12
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "serverest",
3
- "version": "2.29.3",
3
+ "version": "2.29.4",
4
4
  "description": "Servidor REST local de forma rápida e simples para estudo de testes de API",
5
5
  "author": "Paulo Gonçalves <author@serverest.dev> (https://www.linkedin.com/in/paulo-goncalves/)",
6
6
  "license": "GPL-3.0",
@@ -32,6 +32,7 @@
32
32
  "prepare": "is-ci || husky install",
33
33
  "commit": "cz",
34
34
  "start": "node ./src/server.js",
35
+ "start:debug": "node --inspect=0.0.0.0 ./src/server.js",
35
36
  "dev": "nodemon --legacy-watch -e json,js ./src/server.js --nodoc",
36
37
  "test:mutation": "stryker run ./test/stryker.conf.js",
37
38
  "test:mutation:diff": "stryker-diff-runner --path ./test/stryker.conf.js --branch trunk",
@@ -66,6 +67,7 @@
66
67
  "morgan": "^1.10.0",
67
68
  "nedb-promises": "^5.0.0",
68
69
  "open": "^8.0.6",
70
+ "rate-limiter-flexible": "^5.0.3",
69
71
  "swagger-ui-express": "^4.1.4",
70
72
  "yargs": "^16.2.0"
71
73
  },
package/src/app.js CHANGED
@@ -23,6 +23,7 @@ const errorHandler = require('./middlewares/error-handler')
23
23
  const moesifMiddleware = require('./middlewares/moesif-monitor-middleware')
24
24
  const { version } = require('../package.json')
25
25
  const swaggerDocument = require('../docs/swagger.json')
26
+ const rateLimiter = require('./middlewares/rate-limiter')
26
27
  const packageJson = require('../package.json')
27
28
 
28
29
  const app = express()
@@ -48,6 +49,7 @@ app.use(queryParser())
48
49
  app.use(timeout())
49
50
  app.use(cors())
50
51
  app.use(moesifMiddleware)
52
+ app.use(rateLimiter)
51
53
 
52
54
  app.disable('etag')
53
55
 
@@ -0,0 +1,28 @@
1
+ /* istanbul ignore file */
2
+
3
+ const { RateLimiterMemory } = require('rate-limiter-flexible')
4
+
5
+ const {
6
+ aplicacaoExecutandoLocalmente,
7
+ ehAmbienteDeTestes
8
+ } = require('../utils/ambiente')
9
+ const { LOAD_TEST_DETECTED } = require('../utils/constants')
10
+
11
+ const rateLimiter = new RateLimiterMemory({
12
+ points: 600, // requests
13
+ duration: 30 // segundo por IP
14
+ })
15
+
16
+ module.exports = async (req, res, next) => {
17
+ if (aplicacaoExecutandoLocalmente() || ehAmbienteDeTestes) {
18
+ return next()
19
+ }
20
+
21
+ await rateLimiter.consume(req.ip)
22
+ .then(() => next())
23
+ .catch(() => {
24
+ return res.status(429).send({
25
+ message: LOAD_TEST_DETECTED
26
+ })
27
+ })
28
+ }
@@ -22,5 +22,6 @@ module.exports = {
22
22
  REPLENISHED_STOCK: 'Estoque dos produtos reabastecido',
23
23
  USER_NOT_FOUND: 'Usuário não encontrado',
24
24
  CART_NOT_FOUND: 'Carrinho não encontrado',
25
- PRODUCT_NOT_FOUND: 'Produto não encontrado'
25
+ PRODUCT_NOT_FOUND: 'Produto não encontrado',
26
+ LOAD_TEST_DETECTED: 'Foi detectado comportamento equivalente a teste de carga, não execute teste de carga nesse ambiente. Leia a documentação: https://github.com/ServeRest/ServeRest#teste-de-carga'
26
27
  }