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 +1 -1
- package/package.json +3 -1
- package/src/app.js +2 -0
- package/src/middlewares/rate-limiter.js +28 -0
- package/src/utils/constants.js +2 -1
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://
|
|
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
|
+
"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
|
+
}
|
package/src/utils/constants.js
CHANGED
|
@@ -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
|
}
|