@ecdt/server-common 1.0.0 → 1.0.1

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 ADDED
@@ -0,0 +1,58 @@
1
+ # @ecdt/server-common
2
+
3
+ Conjunto de ferramentas e configurações comuns para servidores Express da Econodata.
4
+
5
+ ---
6
+
7
+ ## O que esta biblioteca faz
8
+
9
+ `@ecdt/server-common` fornece um conjunto de middlewares pré-configurados para aplicações Express, eliminando a necessidade de configurar manualmente o parsing de requisições e a sanitização de tokens em cada serviço.
10
+
11
+ ### `expressCommonMiddlewares()`
12
+
13
+ Retorna um array com os seguintes middlewares já configurados, prontos para serem aplicados no Express via `app.use()`:
14
+
15
+ | Middleware | Descrição |
16
+ |---|---|
17
+ | `bodyParser.text()` | Faz o parse de corpos de requisição como texto puro |
18
+ | `bodyParser.json()` | Faz o parse de corpos de requisição no formato JSON |
19
+ | `bodyParser.urlencoded({ extended: false })` | Faz o parse de corpos no formato `application/x-www-form-urlencoded` |
20
+ | `devMktTokenSanitaze` | Sanitiza o token de autenticação recebido no header `Authorization` ou no cookie de sessão |
21
+
22
+ #### Sobre o `devMktTokenSanitaze`
23
+
24
+ Este middleware normaliza tokens de autenticação que chegam codificados na URL (substituindo `+` e `%2B` por espaço). Ele verifica:
25
+
26
+ 1. O header `Authorization` — se presente, sanitiza o valor diretamente.
27
+ 2. O cookie da requisição — se não houver `Authorization`, extrai o token do cookie de sessão e o define em `req.headers.authorization`.
28
+
29
+ > **Atenção:** O nome do cookie de sessão é determinado pela variável de ambiente `ENV`. Se `ENV=hml`, o cookie esperado é `hml-ecdt_token_site`; nos demais ambientes (`beta`, `prd`), é `ecdt_token_site`.
30
+
31
+ ---
32
+
33
+ ## Instalação
34
+
35
+ ```bash
36
+ npm install @ecdt/server-common
37
+ ```
38
+
39
+ ---
40
+
41
+ ## Uso
42
+
43
+ ```js
44
+ const express = require("express");
45
+ const { expressCommonMiddlewares } = require("@ecdt/server-common");
46
+
47
+ const app = express();
48
+
49
+ app.use(...expressCommonMiddlewares());
50
+
51
+ app.get("/health", (req, res) => {
52
+ res.json({ status: "ok" });
53
+ });
54
+
55
+ app.listen(3000);
56
+ ```
57
+
58
+ ---
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@ecdt/server-common",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Conjunto de ferramentas e configurações comuns nos servidores da Econodata",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
8
8
  },
9
9
  "author": "",
10
- "license": "ISC"
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "body-parser": "^2.2.2"
13
+ }
11
14
  }
package/src/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ declare module '@ecdt/server-common' {
2
+ /**
3
+ * Aplica bodyParser.text(), bodyParser.json(), bodyParser.urlencoded({extended: false}) e devMktTokenSanitaze()
4
+ * no middleware do express.
5
+ *
6
+ * Uso: app.use(...expressCommonMiddlewares())
7
+ */
8
+ export function expressCommonMiddlewares(): (req: unknown, res: unknown, next: (err?: unknown) => void) => void;
9
+ }
package/src/index.js CHANGED
@@ -0,0 +1,11 @@
1
+ const bodyParser = require("body-parser");
2
+ const { devMktTokenSanitaze } = require("./services/tokenService.js");
3
+
4
+ function expressCommonMiddlewares(){
5
+ return [bodyParser.text(), bodyParser.json(), bodyParser.urlencoded({extended: false}), devMktTokenSanitaze];
6
+ }
7
+
8
+
9
+
10
+
11
+ module.exports = { expressCommonMiddlewares }
@@ -0,0 +1,29 @@
1
+ const COOKIESITENAME = `${process.env.ENV == 'hml' ? 'hml-' : ''}ecdt_token_site`
2
+
3
+ function devMktTokenSanitaze(req, res, next) {
4
+ if(req?.headers == null) return next();
5
+
6
+ if (req.headers.authorization) {
7
+ req.headers.authorization = req.headers.authorization
8
+ .replace("+", " ")
9
+ .replace("%2B", " ");
10
+ } else if (req.headers.cookie) {
11
+ req.headers.authorization = `${getCookieSite(
12
+ req.headers.cookie
13
+ )}`;
14
+ }
15
+
16
+ return next();
17
+ }
18
+
19
+ function getCookieSite(cookie){
20
+ let cookies = cookie.split(';');
21
+ for (let index = 0; index < cookies.length; index++) {
22
+ if(cookies[index].includes(COOKIESITENAME)){
23
+ return cookies[index].split('=')[1].replace('+',' ').replace('%2B',' ')
24
+ }
25
+ }
26
+ return '';
27
+ }
28
+
29
+ module.exports = {devMktTokenSanitaze}