@ecdt/server-common 1.0.5 → 1.0.6

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
@@ -34,7 +34,8 @@ Retorna o middleware de CORS padrão dos servidores Econodata (baseado no pacote
34
34
 
35
35
  | Opção | Tipo | Descrição |
36
36
  |---|---|---|
37
- | `origins` | `string[]` (obrigatório) | Origins permitidas. Requisições de outras origins não recebem os headers CORS (o navegador bloqueia a resposta) |
37
+ | `origins` | `string[]` | Origins permitidas. Requisições de outras origins não recebem os headers CORS (o navegador bloqueia a resposta). Obrigatório se `econodataOrigins` não for `true` |
38
+ | `econodataOrigins` | `boolean` | Permite todas as origins `https` do domínio `econodata.com.br` (qualquer subdomínio, ex: `https://app.econodata.com.br`, `https://api.hml.econodata.com.br`) |
38
39
  | `extraHeaders` | `string[]` | Headers adicionais além dos padrões |
39
40
  | `headers` | `string[]` | Lista **exata** de headers permitidos — substitui os padrões. Não combinar com `extraHeaders` |
40
41
  | `methods` | `string[]` | Lista **exata** de métodos permitidos. Default: todos (`GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS`) |
@@ -48,6 +49,12 @@ const { expressCors } = require("@ecdt/server-common");
48
49
  // Configuração mínima
49
50
  app.use(expressCors({ origins: ["https://app.econodata.com.br"] }));
50
51
 
52
+ // Todas as origins do domínio econodata.com.br (qualquer subdomínio)
53
+ app.use(expressCors({ econodataOrigins: true }));
54
+
55
+ // Combinando econodataOrigins com origins extras
56
+ app.use(expressCors({ econodataOrigins: true, origins: ["http://localhost:3000"] }));
57
+
51
58
  // Headers extras além dos padrões
52
59
  app.use(expressCors({ origins: [...], extraHeaders: ["X-Custom-Header"] }));
53
60
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecdt/server-common",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Conjunto de ferramentas e configurações comuns nos servidores da Econodata",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
package/src/index.d.ts CHANGED
@@ -8,8 +8,10 @@ declare module '@ecdt/server-common' {
8
8
  export function expressCommonMiddlewares(): (req: unknown, res: unknown, next: (err?: unknown) => void) => void;
9
9
 
10
10
  export interface ExpressCorsOptions {
11
- /** Origins permitidas (ex: ["https://app.econodata.com.br"]). Obrigatório. */
12
- origins: string[];
11
+ /** Origins permitidas (ex: ["https://app.econodata.com.br"]). Obrigatório se econodataOrigins não for true. */
12
+ origins?: string[];
13
+ /** Permite todas as origins https do domínio econodata.com.br (qualquer subdomínio). */
14
+ econodataOrigins?: boolean;
13
15
  /** Headers adicionais além dos padrões (Authorization, Content-Type, X-Requested-With). */
14
16
  extraHeaders?: string[];
15
17
  /** Lista exata de headers permitidos — substitui os padrões. Não combinar com extraHeaders. */
@@ -2,17 +2,22 @@ const cors = require("cors");
2
2
 
3
3
  const DEFAULT_HEADERS = ["Authorization", "Content-Type", "X-Requested-With"];
4
4
 
5
+ // Qualquer subdomínio (em qualquer nível) de econodata.com.br via https, incluindo o domínio raiz
6
+ const ECONODATA_ORIGINS_REGEX = /^https:\/\/([a-z0-9-]+\.)*econodata\.com\.br$/;
7
+
5
8
  /**
6
9
  * @param {object} options
7
- * @param {string[]} options.origins - Origins permitidas (ex: ["https://app.econodata.com.br"])
10
+ * @param {string[]} [options.origins] - Origins permitidas (ex: ["https://app.econodata.com.br"])
11
+ * @param {boolean} [options.econodataOrigins] - Permite todas as origins https do domínio econodata.com.br (qualquer subdomínio)
8
12
  * @param {string[]} [options.extraHeaders] - Headers adicionais além dos padrões
9
13
  * @param {string[]} [options.headers] - Lista exata de headers (ignora os padrões e extraHeaders)
10
14
  * @param {string[]} [options.methods] - Lista exata de métodos permitidos (default: todos)
11
15
  * @returns middleware do express
12
16
  */
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");
17
+ function expressCors({ origins, econodataOrigins, extraHeaders, headers, methods } = {}) {
18
+ const hasOrigins = Array.isArray(origins) && origins.length > 0;
19
+ if (!hasOrigins && !econodataOrigins) {
20
+ throw new Error("expressCors: informe 'origins' (array com pelo menos uma origin) e/ou 'econodataOrigins: true'");
16
21
  }
17
22
  if (headers && extraHeaders) {
18
23
  throw new Error("expressCors: use 'headers' OU 'extraHeaders', não os dois ao mesmo tempo");
@@ -20,12 +25,17 @@ function expressCors({ origins, extraHeaders, headers, methods } = {}) {
20
25
 
21
26
  const allowedHeaders = headers ?? [...DEFAULT_HEADERS, ...(extraHeaders ?? [])];
22
27
 
28
+ const allowedOrigins = [
29
+ ...(hasOrigins ? origins : []),
30
+ ...(econodataOrigins ? [ECONODATA_ORIGINS_REGEX] : []),
31
+ ];
32
+
23
33
  return cors({
24
- origin: origins,
34
+ origin: allowedOrigins,
25
35
  credentials: true,
26
36
  allowedHeaders,
27
37
  methods: methods ?? ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE", "OPTIONS"],
28
38
  });
29
39
  }
30
40
 
31
- module.exports = { expressCors, DEFAULT_HEADERS };
41
+ module.exports = { expressCors, DEFAULT_HEADERS, ECONODATA_ORIGINS_REGEX };