@syntay/fastay 0.1.7 → 0.1.8
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/dist/app.d.ts +39 -0
- package/dist/app.js +28 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/utils/cookies.d.ts +1 -0
- package/dist/utils/cookies.js +1 -0
- package/package.json +3 -1
- package/src/app.ts +89 -0
- package/src/index.ts +1 -0
- package/src/utils/cookies.ts +2 -0
package/dist/app.d.ts
CHANGED
|
@@ -75,6 +75,45 @@ export type CreateAppOptions = {
|
|
|
75
75
|
* Default: "/api"
|
|
76
76
|
*/
|
|
77
77
|
baseRoute?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Configuration to enable CORS (Cross-Origin Resource Sharing) in Fastay.
|
|
80
|
+
*/
|
|
81
|
+
enableCors?: {
|
|
82
|
+
/**
|
|
83
|
+
* If true, permite requisições de qualquer origem.
|
|
84
|
+
* Default: false
|
|
85
|
+
*/
|
|
86
|
+
allowAnyOrigin?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Lista de origens específicas permitidas para envio de cookies.
|
|
89
|
+
* Exemplo: ["http://localhost:3000", "https://meusite.com"]
|
|
90
|
+
*/
|
|
91
|
+
cookieOrigins?: string[];
|
|
92
|
+
/**
|
|
93
|
+
* Se true, habilita envio de cookies cross-origin.
|
|
94
|
+
* Default: false
|
|
95
|
+
*/
|
|
96
|
+
credentials?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Lista de métodos HTTP permitidos, separados por vírgula.
|
|
99
|
+
* Default: "GET,POST,PUT,PATCH,DELETE,OPTIONS"
|
|
100
|
+
*/
|
|
101
|
+
methods?: string;
|
|
102
|
+
/**
|
|
103
|
+
* Lista de cabeçalhos permitidos na requisição.
|
|
104
|
+
* Default: "Content-Type, Authorization"
|
|
105
|
+
*/
|
|
106
|
+
headers?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Cabeçalhos expostos ao cliente.
|
|
109
|
+
* Exemplo: ["X-Custom-Header"]
|
|
110
|
+
*/
|
|
111
|
+
exposedHeaders?: string;
|
|
112
|
+
/**
|
|
113
|
+
* Tempo máximo de cache para requisições prévias (preflight), em segundos.
|
|
114
|
+
*/
|
|
115
|
+
maxAge?: number;
|
|
116
|
+
};
|
|
78
117
|
/**
|
|
79
118
|
* Port on which `.listen()` will run the server.
|
|
80
119
|
* Default: 3000
|
package/dist/app.js
CHANGED
|
@@ -95,6 +95,34 @@ export async function createApp(opts) {
|
|
|
95
95
|
app.use((req, res, next) => {
|
|
96
96
|
res.setHeader('X-Powered-By', 'Syntay Engine');
|
|
97
97
|
req.cookies = new RequestCookies(req.headers.cookie);
|
|
98
|
+
const corsOpts = opts?.enableCors || {};
|
|
99
|
+
// Determina a origem
|
|
100
|
+
let origin = '*';
|
|
101
|
+
if (corsOpts.credentials && corsOpts.cookieOrigins?.length) {
|
|
102
|
+
// Se a origem estiver na lista de cookieOrigins, permite cookies
|
|
103
|
+
if (req.headers.origin &&
|
|
104
|
+
corsOpts.cookieOrigins.includes(req.headers.origin)) {
|
|
105
|
+
origin = req.headers.origin;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
origin = ''; // bloqueia cookies para outras origens
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (!corsOpts.credentials && corsOpts.allowAnyOrigin) {
|
|
112
|
+
origin = '*';
|
|
113
|
+
}
|
|
114
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
115
|
+
res.setHeader('Access-Control-Allow-Credentials', corsOpts.credentials ? 'true' : 'false');
|
|
116
|
+
res.setHeader('Access-Control-Allow-Methods', corsOpts.methods || 'GET,POST,PUT,PATCH,DELETE,OPTIONS');
|
|
117
|
+
res.setHeader('Access-Control-Allow-Headers', corsOpts.headers || 'Content-Type, Authorization');
|
|
118
|
+
if (corsOpts.exposedHeaders) {
|
|
119
|
+
res.setHeader('Access-Control-Expose-Headers', corsOpts.exposedHeaders);
|
|
120
|
+
}
|
|
121
|
+
if (corsOpts.maxAge) {
|
|
122
|
+
res.setHeader('Access-Control-Max-Age', corsOpts.maxAge.toString());
|
|
123
|
+
}
|
|
124
|
+
if (req.method === 'OPTIONS')
|
|
125
|
+
return res.sendStatus(204);
|
|
98
126
|
next();
|
|
99
127
|
});
|
|
100
128
|
// load routes
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/utils/cookies.d.ts
CHANGED
package/dist/utils/cookies.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syntay/fastay",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Framework backend moderno baseado em Express.js, para criar APIs rapidamente",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
"access": "public"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
+
"chokidar": "^4.0.3",
|
|
31
32
|
"express": "^5.1.0",
|
|
33
|
+
"import-fresh": "^3.3.1",
|
|
32
34
|
"pino": "^10.1.0",
|
|
33
35
|
"pino-pretty": "^13.1.2"
|
|
34
36
|
},
|
package/src/app.ts
CHANGED
|
@@ -96,6 +96,52 @@ export type CreateAppOptions = {
|
|
|
96
96
|
*/
|
|
97
97
|
baseRoute?: string;
|
|
98
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Configuration to enable CORS (Cross-Origin Resource Sharing) in Fastay.
|
|
101
|
+
*/
|
|
102
|
+
enableCors?: {
|
|
103
|
+
/**
|
|
104
|
+
* If true, permite requisições de qualquer origem.
|
|
105
|
+
* Default: false
|
|
106
|
+
*/
|
|
107
|
+
allowAnyOrigin?: boolean;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Lista de origens específicas permitidas para envio de cookies.
|
|
111
|
+
* Exemplo: ["http://localhost:3000", "https://meusite.com"]
|
|
112
|
+
*/
|
|
113
|
+
cookieOrigins?: string[];
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Se true, habilita envio de cookies cross-origin.
|
|
117
|
+
* Default: false
|
|
118
|
+
*/
|
|
119
|
+
credentials?: boolean;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Lista de métodos HTTP permitidos, separados por vírgula.
|
|
123
|
+
* Default: "GET,POST,PUT,PATCH,DELETE,OPTIONS"
|
|
124
|
+
*/
|
|
125
|
+
methods?: string;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Lista de cabeçalhos permitidos na requisição.
|
|
129
|
+
* Default: "Content-Type, Authorization"
|
|
130
|
+
*/
|
|
131
|
+
headers?: string;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Cabeçalhos expostos ao cliente.
|
|
135
|
+
* Exemplo: ["X-Custom-Header"]
|
|
136
|
+
*/
|
|
137
|
+
exposedHeaders?: string;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Tempo máximo de cache para requisições prévias (preflight), em segundos.
|
|
141
|
+
*/
|
|
142
|
+
maxAge?: number;
|
|
143
|
+
};
|
|
144
|
+
|
|
99
145
|
/**
|
|
100
146
|
* Port on which `.listen()` will run the server.
|
|
101
147
|
* Default: 3000
|
|
@@ -218,6 +264,49 @@ export async function createApp(opts?: CreateAppOptions) {
|
|
|
218
264
|
app.use((req: Request, res: Response, next: Next) => {
|
|
219
265
|
res.setHeader('X-Powered-By', 'Syntay Engine');
|
|
220
266
|
(req as any).cookies = new RequestCookies(req.headers.cookie);
|
|
267
|
+
|
|
268
|
+
const corsOpts = opts?.enableCors || {};
|
|
269
|
+
|
|
270
|
+
// Determina a origem
|
|
271
|
+
let origin = '*';
|
|
272
|
+
|
|
273
|
+
if (corsOpts.credentials && corsOpts.cookieOrigins?.length) {
|
|
274
|
+
// Se a origem estiver na lista de cookieOrigins, permite cookies
|
|
275
|
+
if (
|
|
276
|
+
req.headers.origin &&
|
|
277
|
+
corsOpts.cookieOrigins.includes(req.headers.origin)
|
|
278
|
+
) {
|
|
279
|
+
origin = req.headers.origin;
|
|
280
|
+
} else {
|
|
281
|
+
origin = ''; // bloqueia cookies para outras origens
|
|
282
|
+
}
|
|
283
|
+
} else if (!corsOpts.credentials && corsOpts.allowAnyOrigin) {
|
|
284
|
+
origin = '*';
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
288
|
+
res.setHeader(
|
|
289
|
+
'Access-Control-Allow-Credentials',
|
|
290
|
+
corsOpts.credentials ? 'true' : 'false'
|
|
291
|
+
);
|
|
292
|
+
res.setHeader(
|
|
293
|
+
'Access-Control-Allow-Methods',
|
|
294
|
+
corsOpts.methods || 'GET,POST,PUT,PATCH,DELETE,OPTIONS'
|
|
295
|
+
);
|
|
296
|
+
res.setHeader(
|
|
297
|
+
'Access-Control-Allow-Headers',
|
|
298
|
+
corsOpts.headers || 'Content-Type, Authorization'
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
if (corsOpts.exposedHeaders) {
|
|
302
|
+
res.setHeader('Access-Control-Expose-Headers', corsOpts.exposedHeaders);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (corsOpts.maxAge) {
|
|
306
|
+
res.setHeader('Access-Control-Max-Age', corsOpts.maxAge.toString());
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
if (req.method === 'OPTIONS') return res.sendStatus(204);
|
|
221
310
|
next();
|
|
222
311
|
});
|
|
223
312
|
|
package/src/index.ts
CHANGED