@ecdt/server-common 1.0.3 → 1.0.5
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 +27 -0
- package/package.json +3 -2
- package/src/index.d.ts +20 -1
- package/src/index.js +2 -1
- package/src/services/corsService.js +31 -0
package/README.md
CHANGED
|
@@ -28,6 +28,33 @@ Este middleware normaliza tokens de autenticação que chegam codificados na URL
|
|
|
28
28
|
|
|
29
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
30
|
|
|
31
|
+
### `expressCors(options)`
|
|
32
|
+
|
|
33
|
+
Retorna o middleware de CORS padrão dos servidores Econodata (baseado no pacote [`cors`](https://www.npmjs.com/package/cors)).
|
|
34
|
+
|
|
35
|
+
| Opção | Tipo | Descrição |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `origins` | `string[]` (obrigatório) | Origins permitidas. Requisições de outras origins não recebem os headers CORS (o navegador bloqueia a resposta) |
|
|
38
|
+
| `extraHeaders` | `string[]` | Headers adicionais além dos padrões |
|
|
39
|
+
| `headers` | `string[]` | Lista **exata** de headers permitidos — substitui os padrões. Não combinar com `extraHeaders` |
|
|
40
|
+
| `methods` | `string[]` | Lista **exata** de métodos permitidos. Default: todos (`GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS`) |
|
|
41
|
+
|
|
42
|
+
- **Headers padrões:** `Authorization`, `Content-Type`, `X-Requested-With`
|
|
43
|
+
- **Credentials:** sempre habilitado (`Access-Control-Allow-Credentials: true`), por isso a origin permitida é sempre ecoada — nunca `*`
|
|
44
|
+
|
|
45
|
+
```js
|
|
46
|
+
const { expressCors } = require("@ecdt/server-common");
|
|
47
|
+
|
|
48
|
+
// Configuração mínima
|
|
49
|
+
app.use(expressCors({ origins: ["https://app.econodata.com.br"] }));
|
|
50
|
+
|
|
51
|
+
// Headers extras além dos padrões
|
|
52
|
+
app.use(expressCors({ origins: [...], extraHeaders: ["X-Custom-Header"] }));
|
|
53
|
+
|
|
54
|
+
// Lista exata de headers e métodos
|
|
55
|
+
app.use(expressCors({ origins: [...], headers: ["Content-Type"], methods: ["GET", "POST"] }));
|
|
56
|
+
```
|
|
57
|
+
|
|
31
58
|
---
|
|
32
59
|
|
|
33
60
|
## Instalação
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ecdt/server-common",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Conjunto de ferramentas e configurações comuns nos servidores da Econodata",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"author": "",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"body-parser": "^2.2.2"
|
|
12
|
+
"body-parser": "^2.2.2",
|
|
13
|
+
"cors": "^2.8.6"
|
|
13
14
|
}
|
|
14
15
|
}
|
package/src/index.d.ts
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
1
|
declare module '@ecdt/server-common' {
|
|
2
2
|
/**
|
|
3
|
-
* Aplica bodyParser.text(), bodyParser.json(), bodyParser.urlencoded({extended: false})
|
|
3
|
+
* Aplica bodyParser.text(), bodyParser.json(), bodyParser.urlencoded({extended: false}) e devMktTokenSanitaze()
|
|
4
4
|
* no middleware do express.
|
|
5
5
|
*
|
|
6
6
|
* Uso: app.use(...expressCommonMiddlewares())
|
|
7
7
|
*/
|
|
8
8
|
export function expressCommonMiddlewares(): (req: unknown, res: unknown, next: (err?: unknown) => void) => void;
|
|
9
|
+
|
|
10
|
+
export interface ExpressCorsOptions {
|
|
11
|
+
/** Origins permitidas (ex: ["https://app.econodata.com.br"]). Obrigatório. */
|
|
12
|
+
origins: string[];
|
|
13
|
+
/** Headers adicionais além dos padrões (Authorization, Content-Type, X-Requested-With). */
|
|
14
|
+
extraHeaders?: string[];
|
|
15
|
+
/** Lista exata de headers permitidos — substitui os padrões. Não combinar com extraHeaders. */
|
|
16
|
+
headers?: string[];
|
|
17
|
+
/** Lista exata de métodos permitidos. Default: todos (GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS). */
|
|
18
|
+
methods?: string[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Cria o middleware de CORS padrão dos servidores Econodata.
|
|
23
|
+
* Credentials sempre habilitado; origins não listadas não recebem headers CORS.
|
|
24
|
+
*
|
|
25
|
+
* Uso: app.use(expressCors({ origins: ["https://app.econodata.com.br"] }))
|
|
26
|
+
*/
|
|
27
|
+
export function expressCors(options: ExpressCorsOptions): (req: unknown, res: unknown, next: (err?: unknown) => void) => void;
|
|
9
28
|
}
|
package/src/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const bodyParser = require("body-parser");
|
|
2
2
|
const { devMktTokenSanitaze } = require("./services/tokenService.js");
|
|
3
|
+
const { expressCors } = require("./services/corsService.js");
|
|
3
4
|
|
|
4
5
|
function expressCommonMiddlewares(){
|
|
5
6
|
return [bodyParser.text(), bodyParser.json(), bodyParser.urlencoded({extended: false}), devMktTokenSanitaze];
|
|
@@ -8,4 +9,4 @@ function expressCommonMiddlewares(){
|
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
|
|
11
|
-
module.exports = { expressCommonMiddlewares }
|
|
12
|
+
module.exports = { expressCommonMiddlewares, expressCors }
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const cors = require("cors");
|
|
2
|
+
|
|
3
|
+
const DEFAULT_HEADERS = ["Authorization", "Content-Type", "X-Requested-With"];
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {object} options
|
|
7
|
+
* @param {string[]} options.origins - Origins permitidas (ex: ["https://app.econodata.com.br"])
|
|
8
|
+
* @param {string[]} [options.extraHeaders] - Headers adicionais além dos padrões
|
|
9
|
+
* @param {string[]} [options.headers] - Lista exata de headers (ignora os padrões e extraHeaders)
|
|
10
|
+
* @param {string[]} [options.methods] - Lista exata de métodos permitidos (default: todos)
|
|
11
|
+
* @returns middleware do express
|
|
12
|
+
*/
|
|
13
|
+
function expressCors({ origins, extraHeaders, headers, methods } = {}) {
|
|
14
|
+
if (!Array.isArray(origins) || origins.length === 0) {
|
|
15
|
+
throw new Error("expressCors: 'origins' é obrigatório e deve ser um array com pelo menos uma origin");
|
|
16
|
+
}
|
|
17
|
+
if (headers && extraHeaders) {
|
|
18
|
+
throw new Error("expressCors: use 'headers' OU 'extraHeaders', não os dois ao mesmo tempo");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const allowedHeaders = headers ?? [...DEFAULT_HEADERS, ...(extraHeaders ?? [])];
|
|
22
|
+
|
|
23
|
+
return cors({
|
|
24
|
+
origin: origins,
|
|
25
|
+
credentials: true,
|
|
26
|
+
allowedHeaders,
|
|
27
|
+
methods: methods ?? ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE", "OPTIONS"],
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = { expressCors, DEFAULT_HEADERS };
|