vafast 0.4.3 → 0.4.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/dist/{base-server-Bq4_lJWK.mjs → base-server-CSkyjEaY.mjs} +2 -2
- package/dist/{base-server-Bq4_lJWK.mjs.map → base-server-CSkyjEaY.mjs.map} +1 -1
- package/dist/{base-server-Gakrozqk.d.mts → base-server-DvGS6ATg.d.mts} +2 -2
- package/dist/{base64url-BY-HBSpL.d.mts → base64url-0N9uQPjZ.d.mts} +1 -1
- package/dist/{base64url-DLDOeXsk.mjs → base64url-CwQnvZyp.mjs} +1 -1
- package/dist/{base64url-DLDOeXsk.mjs.map → base64url-CwQnvZyp.mjs.map} +1 -1
- package/dist/{component-route-BYV_X1rA.d.mts → component-route-CZawYn61.d.mts} +2 -2
- package/dist/{component-router-DXUXLp1R.mjs → component-router-CErbGh2A.mjs} +2 -2
- package/dist/{component-router-DXUXLp1R.mjs.map → component-router-CErbGh2A.mjs.map} +1 -1
- package/dist/{component-server-BOz4Q-Qt.d.mts → component-server-CGzU4bss.d.mts} +4 -4
- package/dist/{component-server-ARXvZJUQ.mjs → component-server-DAbIyIPI.mjs} +7 -7
- package/dist/{component-server-ARXvZJUQ.mjs.map → component-server-DAbIyIPI.mjs.map} +1 -1
- package/dist/{create-handler-CbSoroA1.mjs → create-handler-B_pfxh3m.mjs} +5 -5
- package/dist/{create-handler-CbSoroA1.mjs.map → create-handler-B_pfxh3m.mjs.map} +1 -1
- package/dist/{create-handler-Dtt0xv6g.d.mts → create-handler-Bo-hvWp-.d.mts} +2 -2
- package/dist/defineRoute.d.mts +3 -3
- package/dist/{dependency-manager-Dbug5INp.d.mts → dependency-manager-C6vFWP2L.d.mts} +1 -1
- package/dist/{dependency-manager-CPkwMI7J.mjs → dependency-manager-Czg7Po2j.mjs} +2 -2
- package/dist/{dependency-manager-CPkwMI7J.mjs.map → dependency-manager-Czg7Po2j.mjs.map} +1 -1
- package/dist/{formats-BSqJWCsG.d.mts → formats-CYLwo9GJ.d.mts} +1 -1
- package/dist/{go-await-B-KP-K8x.mjs → go-await-BGAGJfrB.mjs} +1 -1
- package/dist/{go-await-B-KP-K8x.mjs.map → go-await-BGAGJfrB.mjs.map} +1 -1
- package/dist/{go-await-CqPx9dVQ.d.mts → go-await-DRItVwwh.d.mts} +1 -1
- package/dist/{handle-BhpqNgGf.mjs → handle-Csjtywdc.mjs} +2 -2
- package/dist/{handle-BhpqNgGf.mjs.map → handle-Csjtywdc.mjs.map} +1 -1
- package/dist/{handle-DOidKTI-.d.mts → handle-D0TFoOiX.d.mts} +1 -1
- package/dist/{html-renderer-C3LKTLme.d.mts → html-renderer-CMGKJoIy.d.mts} +1 -1
- package/dist/{html-renderer-CJ3B2Hft.mjs → html-renderer-CczE8mwC.mjs} +2 -2
- package/dist/{html-renderer-CJ3B2Hft.mjs.map → html-renderer-CczE8mwC.mjs.map} +1 -1
- package/dist/{index-DFsQyT61.d.mts → index-Ci52vt55.d.mts} +5 -5
- package/dist/index.d.mts +24 -29
- package/dist/index.mjs +22 -27
- package/dist/index.mjs.map +1 -1
- package/dist/middleware/component-router.d.mts +1 -1
- package/dist/middleware/component-router.mjs +1 -1
- package/dist/{middleware-3ShRJyd1.mjs → middleware-Byp3Hjae.mjs} +3 -3
- package/dist/{middleware-3ShRJyd1.mjs.map → middleware-Byp3Hjae.mjs.map} +1 -1
- package/dist/middleware.d.mts +3 -3
- package/dist/middleware.mjs +1 -1
- package/dist/monitoring/index.d.mts +6 -6
- package/dist/monitoring/index.mjs +3 -3
- package/dist/monitoring/native-monitor.d.mts +6 -6
- package/dist/monitoring/native-monitor.mjs +4 -4
- package/dist/node-server/index.d.mts +1 -1
- package/dist/node-server/index.mjs +3 -3
- package/dist/node-server/request.mjs +1 -1
- package/dist/node-server/response.mjs +1 -1
- package/dist/node-server/serve.d.mts +1 -1
- package/dist/node-server/serve.mjs +2 -2
- package/dist/{parsers-CodQFP1Z.d.mts → parsers-7lvt3Oss.d.mts} +1 -1
- package/dist/{parsers-ROIZWSGI.mjs → parsers-CI_TZ7pO.mjs} +1 -1
- package/dist/{parsers-ROIZWSGI.mjs.map → parsers-CI_TZ7pO.mjs.map} +1 -1
- package/dist/{path-matcher-CXMJ-IrG.mjs → path-matcher-73cJd5Y7.mjs} +2 -2
- package/dist/{path-matcher-CXMJ-IrG.mjs.map → path-matcher-73cJd5Y7.mjs.map} +1 -1
- package/dist/{radix-tree-BWmhTLhT.mjs → radix-tree-D0XYaJKb.mjs} +2 -2
- package/dist/{radix-tree-BWmhTLhT.mjs.map → radix-tree-D0XYaJKb.mjs.map} +1 -1
- package/dist/{request-B2BkUecT.mjs → request-CKC3Ox6M.mjs} +1 -1
- package/dist/{request-B2BkUecT.mjs.map → request-CKC3Ox6M.mjs.map} +1 -1
- package/dist/{request-validator-u2Ccj3_x.d.mts → request-validator-42lY21gn.d.mts} +2 -2
- package/dist/{request-validator-Dyqng-H_.mjs → request-validator-_J5HloRq.mjs} +3 -3
- package/dist/{request-validator-Dyqng-H_.mjs.map → request-validator-_J5HloRq.mjs.map} +1 -1
- package/dist/{response-CUyV5FIm.d.mts → response-A-sZZiJ7.d.mts} +1 -1
- package/dist/{response-BhFKEphr.mjs → response-Cf5FgtmE.mjs} +1 -1
- package/dist/{response-BhFKEphr.mjs.map → response-Cf5FgtmE.mjs.map} +1 -1
- package/dist/{response-CSKW5hsS.mjs → response-DXg4i_yh.mjs} +2 -2
- package/dist/{response-CSKW5hsS.mjs.map → response-DXg4i_yh.mjs.map} +1 -1
- package/dist/{route-BRR15b-p.mjs → route-9pAVP1GC.mjs} +1 -1
- package/dist/{route-BRR15b-p.mjs.map → route-9pAVP1GC.mjs.map} +1 -1
- package/dist/{route-BqmWCG4e.d.mts → route-BJ-40LNI.d.mts} +2 -2
- package/dist/{route-registry-ykzRmaHB.d.mts → route-registry--tx1PNui.d.mts} +2 -2
- package/dist/{route-registry-AlkDgbcE.mjs → route-registry-mcTG0M-t.mjs} +2 -2
- package/dist/{route-registry-AlkDgbcE.mjs.map → route-registry-mcTG0M-t.mjs.map} +1 -1
- package/dist/router/index.d.mts +2 -2
- package/dist/router/index.mjs +2 -2
- package/dist/router/radix-tree.d.mts +3 -3
- package/dist/router/radix-tree.mjs +1 -1
- package/dist/{router-BOeVQrjz.mjs → router-B9HUUCkR.mjs} +2 -2
- package/dist/{router-BOeVQrjz.mjs.map → router-B9HUUCkR.mjs.map} +1 -1
- package/dist/router.d.mts +3 -3
- package/dist/router.mjs +1 -1
- package/dist/{schema-CVuttFSw.d.mts → schema-CPQudJpE.d.mts} +1 -1
- package/dist/{serve-BQQ2JzIH.d.mts → serve-B5WmhK6m.d.mts} +1 -1
- package/dist/{serve-MRGGK7-q.mjs → serve-Be6NvuQk.mjs} +3 -3
- package/dist/{serve-MRGGK7-q.mjs.map → serve-Be6NvuQk.mjs.map} +1 -1
- package/dist/serve.d.mts +1 -1
- package/dist/serve.mjs +2 -2
- package/dist/server/base-server.d.mts +3 -3
- package/dist/server/base-server.mjs +1 -1
- package/dist/server/component-server.d.mts +4 -4
- package/dist/server/component-server.mjs +2 -2
- package/dist/server/index.d.mts +6 -6
- package/dist/server/index.mjs +5 -5
- package/dist/server/server-factory.d.mts +6 -6
- package/dist/server/server-factory.mjs +3 -3
- package/dist/server/server.d.mts +4 -4
- package/dist/server/server.mjs +1 -1
- package/dist/{server-C8WCshmG.mjs → server-BmPKs8oM.mjs} +8 -8
- package/dist/{server-C8WCshmG.mjs.map → server-BmPKs8oM.mjs.map} +1 -1
- package/dist/{server-B0nzGCG5.mjs → server-Cbd3Ia51.mjs} +5 -5
- package/dist/{server-B0nzGCG5.mjs.map → server-Cbd3Ia51.mjs.map} +1 -1
- package/dist/{server-Drc2kSxp.d.mts → server-D9gjszHe.d.mts} +3 -3
- package/dist/{sse-BOd2pvUK.d.mts → sse-BMM6KTfy.d.mts} +2 -2
- package/dist/{sse-US5D9mgE.mjs → sse-BT5yyLgX.mjs} +3 -3
- package/dist/{sse-US5D9mgE.mjs.map → sse-BT5yyLgX.mjs.map} +1 -1
- package/dist/types/component-route.d.mts +1 -1
- package/dist/types/index.d.mts +5 -5
- package/dist/types/index.mjs +1 -1
- package/dist/types/route.d.mts +1 -1
- package/dist/types/route.mjs +1 -1
- package/dist/types/schema.d.mts +1 -1
- package/dist/types/types.d.mts +1 -1
- package/dist/{types-Cb7_2VSt.d.mts → types-DuTa8AVN.d.mts} +1 -1
- package/dist/utils/base64url.d.mts +1 -1
- package/dist/utils/base64url.mjs +1 -1
- package/dist/utils/create-handler.d.mts +2 -2
- package/dist/utils/create-handler.mjs +3 -3
- package/dist/utils/dependency-manager.d.mts +1 -1
- package/dist/utils/dependency-manager.mjs +1 -1
- package/dist/utils/formats.d.mts +1 -1
- package/dist/utils/go-await.d.mts +1 -1
- package/dist/utils/go-await.mjs +1 -1
- package/dist/utils/handle.d.mts +1 -1
- package/dist/utils/handle.mjs +2 -2
- package/dist/utils/html-renderer.d.mts +1 -1
- package/dist/utils/html-renderer.mjs +1 -1
- package/dist/utils/index.d.mts +15 -15
- package/dist/utils/index.mjs +12 -12
- package/dist/utils/parsers.d.mts +1 -1
- package/dist/utils/parsers.mjs +1 -1
- package/dist/utils/path-matcher.mjs +1 -1
- package/dist/utils/request-validator.d.mts +2 -2
- package/dist/utils/request-validator.mjs +3 -3
- package/dist/utils/response.d.mts +1 -1
- package/dist/utils/response.mjs +1 -1
- package/dist/utils/route-registry.d.mts +3 -3
- package/dist/utils/route-registry.mjs +1 -1
- package/dist/utils/sse.d.mts +2 -2
- package/dist/utils/sse.mjs +3 -3
- package/dist/utils/validators/validators.d.mts +1 -1
- package/dist/utils/validators/validators.mjs +1 -1
- package/dist/{validators-CbCLj0Rc.mjs → validators-BBrGePBr.mjs} +1 -1
- package/dist/{validators-CbCLj0Rc.mjs.map → validators-BBrGePBr.mjs.map} +1 -1
- package/dist/{validators-C0eZyxPh.d.mts → validators-CPmnj_y9.d.mts} +1 -1
- package/package.json +1 -1
- package/dist/auth/token.d.mts +0 -44
- package/dist/auth/token.mjs +0 -105
- package/dist/auth/token.mjs.map +0 -1
- package/dist/middleware/auth.d.mts +0 -20
- package/dist/middleware/auth.mjs +0 -98
- package/dist/middleware/auth.mjs.map +0 -1
- package/dist/middleware/authMiddleware.d.mts +0 -9
- package/dist/middleware/authMiddleware.mjs +0 -19
- package/dist/middleware/authMiddleware.mjs.map +0 -1
- package/dist/middleware/cors.d.mts +0 -16
- package/dist/middleware/cors.mjs +0 -38
- package/dist/middleware/cors.mjs.map +0 -1
- package/dist/middleware/rateLimit.d.mts +0 -14
- package/dist/middleware/rateLimit.mjs +0 -34
- package/dist/middleware/rateLimit.mjs.map +0 -1
- /package/dist/{chunk-67U6L5Jh.mjs → chunk-DW4-Jl94.mjs} +0 -0
- /package/dist/{component-route-Do2yyYTi.mjs → component-route-CYxLOnci.mjs} +0 -0
- /package/dist/{index-DXJd7-2Z.d.mts → index-CzItj62a.d.mts} +0 -0
- /package/dist/{schema-CbAaktsZ.mjs → schema-CtVBNfnQ.mjs} +0 -0
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { o as Middleware } from "../types-Cb7_2VSt.mjs";
|
|
2
|
-
import "../schema-CVuttFSw.mjs";
|
|
3
|
-
import "../index-DXJd7-2Z.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/middleware/auth.d.ts
|
|
6
|
-
interface AuthOptions {
|
|
7
|
-
secret: string;
|
|
8
|
-
cookieName?: string;
|
|
9
|
-
headerName?: string;
|
|
10
|
-
required?: boolean;
|
|
11
|
-
roles?: string[];
|
|
12
|
-
permissions?: string[];
|
|
13
|
-
}
|
|
14
|
-
declare function createAuth(options: AuthOptions): Middleware;
|
|
15
|
-
declare function createOptionalAuth(options: Omit<AuthOptions, "required">): Middleware;
|
|
16
|
-
declare function createRoleAuth(roles: string[], options: Omit<AuthOptions, "roles">): Middleware;
|
|
17
|
-
declare function createPermissionAuth(permissions: string[], options: Omit<AuthOptions, "permissions">): Middleware;
|
|
18
|
-
//#endregion
|
|
19
|
-
export { createAuth, createOptionalAuth, createPermissionAuth, createRoleAuth };
|
|
20
|
-
//# sourceMappingURL=auth.d.mts.map
|
package/dist/middleware/auth.mjs
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { r as init_middleware, t as VafastError } from "../middleware-3ShRJyd1.mjs";
|
|
2
|
-
import "../parsers-ROIZWSGI.mjs";
|
|
3
|
-
import { t as getCookie } from "../handle-BhpqNgGf.mjs";
|
|
4
|
-
import { TokenError, verifyToken } from "../auth/token.mjs";
|
|
5
|
-
|
|
6
|
-
//#region src/middleware/auth.ts
|
|
7
|
-
init_middleware();
|
|
8
|
-
function createAuth(options) {
|
|
9
|
-
const { secret, cookieName = "auth", headerName = "authorization", required = true, roles = [], permissions = [] } = options;
|
|
10
|
-
return async (req, next) => {
|
|
11
|
-
const token = getCookie(req, cookieName) || req.headers.get(headerName)?.replace("Bearer ", "") || "";
|
|
12
|
-
if (!token && required) throw new VafastError("缺少认证令牌", {
|
|
13
|
-
status: 401,
|
|
14
|
-
type: "unauthorized",
|
|
15
|
-
expose: true
|
|
16
|
-
});
|
|
17
|
-
if (!token && !required) return next();
|
|
18
|
-
try {
|
|
19
|
-
const user = await verifyToken(token, secret);
|
|
20
|
-
if (!user) throw new VafastError("令牌验证失败", {
|
|
21
|
-
status: 401,
|
|
22
|
-
type: "unauthorized",
|
|
23
|
-
expose: true
|
|
24
|
-
});
|
|
25
|
-
if (roles.length > 0 && user.role && !roles.includes(user.role)) throw new VafastError("权限不足", {
|
|
26
|
-
status: 403,
|
|
27
|
-
type: "forbidden",
|
|
28
|
-
expose: true
|
|
29
|
-
});
|
|
30
|
-
if (permissions.length > 0 && user.permissions) {
|
|
31
|
-
const userPermissions = Array.isArray(user.permissions) ? user.permissions : [user.permissions];
|
|
32
|
-
if (!permissions.some((permission) => userPermissions.includes(permission))) throw new VafastError("权限不足", {
|
|
33
|
-
status: 403,
|
|
34
|
-
type: "forbidden",
|
|
35
|
-
expose: true
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
req.user = user;
|
|
39
|
-
req.token = token;
|
|
40
|
-
return next();
|
|
41
|
-
} catch (error) {
|
|
42
|
-
if (error instanceof TokenError) {
|
|
43
|
-
let status = 401;
|
|
44
|
-
let message = "认证失败";
|
|
45
|
-
switch (error.code) {
|
|
46
|
-
case "EXPIRED_TOKEN":
|
|
47
|
-
status = 401;
|
|
48
|
-
message = "令牌已过期";
|
|
49
|
-
break;
|
|
50
|
-
case "INVALID_SIGNATURE":
|
|
51
|
-
status = 401;
|
|
52
|
-
message = "令牌签名无效";
|
|
53
|
-
break;
|
|
54
|
-
case "MALFORMED_TOKEN":
|
|
55
|
-
status = 400;
|
|
56
|
-
message = "令牌格式错误";
|
|
57
|
-
break;
|
|
58
|
-
default:
|
|
59
|
-
status = 401;
|
|
60
|
-
message = "令牌验证失败";
|
|
61
|
-
}
|
|
62
|
-
throw new VafastError(message, {
|
|
63
|
-
status,
|
|
64
|
-
type: "unauthorized",
|
|
65
|
-
expose: true
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
if (error instanceof VafastError) throw error;
|
|
69
|
-
throw new VafastError("认证过程中发生错误", {
|
|
70
|
-
status: 500,
|
|
71
|
-
type: "internal_error",
|
|
72
|
-
expose: false
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
function createOptionalAuth(options) {
|
|
78
|
-
return createAuth({
|
|
79
|
-
...options,
|
|
80
|
-
required: false
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
function createRoleAuth(roles, options) {
|
|
84
|
-
return createAuth({
|
|
85
|
-
...options,
|
|
86
|
-
roles
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
function createPermissionAuth(permissions, options) {
|
|
90
|
-
return createAuth({
|
|
91
|
-
...options,
|
|
92
|
-
permissions
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
//#endregion
|
|
97
|
-
export { createAuth, createOptionalAuth, createPermissionAuth, createRoleAuth };
|
|
98
|
-
//# sourceMappingURL=auth.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.mjs","names":[],"sources":["../../src/middleware/auth.ts"],"sourcesContent":["// src/middleware/auth.ts\n\nimport type { Middleware } from \"../types\";\nimport { VafastError } from \"../middleware\";\nimport { getCookie } from \"../utils/handle\";\nimport { verifyToken, TokenError, type TokenPayload } from \"../auth/token\";\n\ninterface AuthOptions {\n secret: string;\n cookieName?: string;\n headerName?: string;\n required?: boolean; // 是否必需认证\n roles?: string[]; // 允许的角色\n permissions?: string[]; // 允许的权限\n}\n\nexport function createAuth(options: AuthOptions): Middleware {\n const {\n secret,\n cookieName = \"auth\",\n headerName = \"authorization\",\n required = true,\n roles = [],\n permissions = [],\n } = options;\n\n return async (req, next) => {\n const token =\n getCookie(req, cookieName) ||\n req.headers.get(headerName)?.replace(\"Bearer \", \"\") ||\n \"\";\n\n if (!token && required) {\n throw new VafastError(\"缺少认证令牌\", {\n status: 401,\n type: \"unauthorized\",\n expose: true,\n });\n }\n\n if (!token && !required) {\n return next();\n }\n\n try {\n const user = (await verifyToken(token, secret)) as TokenPayload;\n\n if (!user) {\n throw new VafastError(\"令牌验证失败\", {\n status: 401,\n type: \"unauthorized\",\n expose: true,\n });\n }\n\n // 检查角色权限\n if (roles.length > 0 && user.role && !roles.includes(user.role)) {\n throw new VafastError(\"权限不足\", {\n status: 403,\n type: \"forbidden\",\n expose: true,\n });\n }\n\n // 检查具体权限\n if (permissions.length > 0 && user.permissions) {\n const userPermissions = Array.isArray(user.permissions)\n ? user.permissions\n : [user.permissions];\n\n const hasPermission = permissions.some((permission) =>\n userPermissions.includes(permission),\n );\n\n if (!hasPermission) {\n throw new VafastError(\"权限不足\", {\n status: 403,\n type: \"forbidden\",\n expose: true,\n });\n }\n }\n\n // 🪄 在这里扩展 Request 对象\n (req as any).user = user;\n (req as any).token = token;\n\n return next();\n } catch (error) {\n if (error instanceof TokenError) {\n let status = 401;\n let message = \"认证失败\";\n\n switch (error.code) {\n case \"EXPIRED_TOKEN\":\n status = 401;\n message = \"令牌已过期\";\n break;\n case \"INVALID_SIGNATURE\":\n status = 401;\n message = \"令牌签名无效\";\n break;\n case \"MALFORMED_TOKEN\":\n status = 400;\n message = \"令牌格式错误\";\n break;\n default:\n status = 401;\n message = \"令牌验证失败\";\n }\n\n throw new VafastError(message, {\n status,\n type: \"unauthorized\",\n expose: true,\n });\n }\n\n if (error instanceof VafastError) {\n throw error;\n }\n\n throw new VafastError(\"认证过程中发生错误\", {\n status: 500,\n type: \"internal_error\",\n expose: false,\n });\n }\n };\n}\n\n// 可选认证中间件\nexport function createOptionalAuth(\n options: Omit<AuthOptions, \"required\">,\n): Middleware {\n return createAuth({ ...options, required: false });\n}\n\n// 角色验证中间件\nexport function createRoleAuth(\n roles: string[],\n options: Omit<AuthOptions, \"roles\">,\n): Middleware {\n return createAuth({ ...options, roles });\n}\n\n// 权限验证中间件\nexport function createPermissionAuth(\n permissions: string[],\n options: Omit<AuthOptions, \"permissions\">,\n): Middleware {\n return createAuth({ ...options, permissions });\n}\n"],"mappings":";;;;;;iBAG4C;AAa5C,SAAgB,WAAW,SAAkC;CAC3D,MAAM,EACJ,QACA,aAAa,QACb,aAAa,iBACb,WAAW,MACX,QAAQ,EAAE,EACV,cAAc,EAAE,KACd;AAEJ,QAAO,OAAO,KAAK,SAAS;EAC1B,MAAM,QACJ,UAAU,KAAK,WAAW,IAC1B,IAAI,QAAQ,IAAI,WAAW,EAAE,QAAQ,WAAW,GAAG,IACnD;AAEF,MAAI,CAAC,SAAS,SACZ,OAAM,IAAI,YAAY,UAAU;GAC9B,QAAQ;GACR,MAAM;GACN,QAAQ;GACT,CAAC;AAGJ,MAAI,CAAC,SAAS,CAAC,SACb,QAAO,MAAM;AAGf,MAAI;GACF,MAAM,OAAQ,MAAM,YAAY,OAAO,OAAO;AAE9C,OAAI,CAAC,KACH,OAAM,IAAI,YAAY,UAAU;IAC9B,QAAQ;IACR,MAAM;IACN,QAAQ;IACT,CAAC;AAIJ,OAAI,MAAM,SAAS,KAAK,KAAK,QAAQ,CAAC,MAAM,SAAS,KAAK,KAAK,CAC7D,OAAM,IAAI,YAAY,QAAQ;IAC5B,QAAQ;IACR,MAAM;IACN,QAAQ;IACT,CAAC;AAIJ,OAAI,YAAY,SAAS,KAAK,KAAK,aAAa;IAC9C,MAAM,kBAAkB,MAAM,QAAQ,KAAK,YAAY,GACnD,KAAK,cACL,CAAC,KAAK,YAAY;AAMtB,QAAI,CAJkB,YAAY,MAAM,eACtC,gBAAgB,SAAS,WAAW,CACrC,CAGC,OAAM,IAAI,YAAY,QAAQ;KAC5B,QAAQ;KACR,MAAM;KACN,QAAQ;KACT,CAAC;;AAKN,GAAC,IAAY,OAAO;AACpB,GAAC,IAAY,QAAQ;AAErB,UAAO,MAAM;WACN,OAAO;AACd,OAAI,iBAAiB,YAAY;IAC/B,IAAI,SAAS;IACb,IAAI,UAAU;AAEd,YAAQ,MAAM,MAAd;KACE,KAAK;AACH,eAAS;AACT,gBAAU;AACV;KACF,KAAK;AACH,eAAS;AACT,gBAAU;AACV;KACF,KAAK;AACH,eAAS;AACT,gBAAU;AACV;KACF;AACE,eAAS;AACT,gBAAU;;AAGd,UAAM,IAAI,YAAY,SAAS;KAC7B;KACA,MAAM;KACN,QAAQ;KACT,CAAC;;AAGJ,OAAI,iBAAiB,YACnB,OAAM;AAGR,SAAM,IAAI,YAAY,aAAa;IACjC,QAAQ;IACR,MAAM;IACN,QAAQ;IACT,CAAC;;;;AAMR,SAAgB,mBACd,SACY;AACZ,QAAO,WAAW;EAAE,GAAG;EAAS,UAAU;EAAO,CAAC;;AAIpD,SAAgB,eACd,OACA,SACY;AACZ,QAAO,WAAW;EAAE,GAAG;EAAS;EAAO,CAAC;;AAI1C,SAAgB,qBACd,aACA,SACY;AACZ,QAAO,WAAW;EAAE,GAAG;EAAS;EAAa,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { o as Middleware } from "../types-Cb7_2VSt.mjs";
|
|
2
|
-
import "../schema-CVuttFSw.mjs";
|
|
3
|
-
import "../index-DXJd7-2Z.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/middleware/authMiddleware.d.ts
|
|
6
|
-
declare const requireAuth: Middleware;
|
|
7
|
-
//#endregion
|
|
8
|
-
export { requireAuth };
|
|
9
|
-
//# sourceMappingURL=authMiddleware.d.mts.map
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { r as init_middleware, t as VafastError } from "../middleware-3ShRJyd1.mjs";
|
|
2
|
-
import "../parsers-ROIZWSGI.mjs";
|
|
3
|
-
import { t as getCookie } from "../handle-BhpqNgGf.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/middleware/authMiddleware.ts
|
|
6
|
-
init_middleware();
|
|
7
|
-
const requireAuth = async (req, next) => {
|
|
8
|
-
const token = getCookie(req, "auth");
|
|
9
|
-
if (!token || token !== "valid-token") throw new VafastError("Unauthorized", {
|
|
10
|
-
status: 401,
|
|
11
|
-
type: "unauthorized",
|
|
12
|
-
expose: true
|
|
13
|
-
});
|
|
14
|
-
return next();
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
//#endregion
|
|
18
|
-
export { requireAuth };
|
|
19
|
-
//# sourceMappingURL=authMiddleware.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authMiddleware.mjs","names":[],"sources":["../../src/middleware/authMiddleware.ts"],"sourcesContent":["// src/middleware/authMiddleware.ts\nimport type { Middleware } from \"../types\";\nimport { VafastError } from \"../middleware\";\nimport { getCookie } from \"../utils/handle\";\n\nexport const requireAuth: Middleware = async (req, next) => {\n const token = getCookie(req, \"auth\");\n\n if (!token || token !== \"valid-token\") {\n throw new VafastError(\"Unauthorized\", {\n status: 401,\n type: \"unauthorized\",\n expose: true,\n });\n }\n\n return next();\n};\n"],"mappings":";;;;;iBAE4C;AAG5C,MAAa,cAA0B,OAAO,KAAK,SAAS;CAC1D,MAAM,QAAQ,UAAU,KAAK,OAAO;AAEpC,KAAI,CAAC,SAAS,UAAU,cACtB,OAAM,IAAI,YAAY,gBAAgB;EACpC,QAAQ;EACR,MAAM;EACN,QAAQ;EACT,CAAC;AAGJ,QAAO,MAAM"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { o as Middleware } from "../types-Cb7_2VSt.mjs";
|
|
2
|
-
import "../schema-CVuttFSw.mjs";
|
|
3
|
-
import "../index-DXJd7-2Z.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/middleware/cors.d.ts
|
|
6
|
-
interface CORSOptions {
|
|
7
|
-
origin?: string[] | "*";
|
|
8
|
-
methods?: string[];
|
|
9
|
-
headers?: string[];
|
|
10
|
-
credentials?: boolean;
|
|
11
|
-
maxAge?: number;
|
|
12
|
-
}
|
|
13
|
-
declare function createCORS(options?: CORSOptions): Middleware;
|
|
14
|
-
//#endregion
|
|
15
|
-
export { CORSOptions, createCORS };
|
|
16
|
-
//# sourceMappingURL=cors.d.mts.map
|
package/dist/middleware/cors.mjs
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
//#region src/middleware/cors.ts
|
|
2
|
-
function createCORS(options = {}) {
|
|
3
|
-
const { origin = [], methods = [
|
|
4
|
-
"GET",
|
|
5
|
-
"POST",
|
|
6
|
-
"PUT",
|
|
7
|
-
"DELETE",
|
|
8
|
-
"OPTIONS"
|
|
9
|
-
], headers = [], credentials = false, maxAge } = options;
|
|
10
|
-
return async (req, next) => {
|
|
11
|
-
const reqOrigin = req.headers.get("Origin") || "";
|
|
12
|
-
const isAllowedOrigin = origin === "*" || origin.includes(reqOrigin);
|
|
13
|
-
if (req.method === "OPTIONS") {
|
|
14
|
-
const resHeaders = new Headers();
|
|
15
|
-
if (isAllowedOrigin) {
|
|
16
|
-
resHeaders.set("Access-Control-Allow-Origin", origin === "*" ? "*" : reqOrigin);
|
|
17
|
-
resHeaders.set("Access-Control-Allow-Methods", methods.join(","));
|
|
18
|
-
resHeaders.set("Access-Control-Allow-Headers", headers.join(","));
|
|
19
|
-
if (credentials) resHeaders.set("Access-Control-Allow-Credentials", "true");
|
|
20
|
-
if (maxAge) resHeaders.set("Access-Control-Max-Age", maxAge.toString());
|
|
21
|
-
}
|
|
22
|
-
return new Response(null, {
|
|
23
|
-
status: 204,
|
|
24
|
-
headers: resHeaders
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
const res = await next();
|
|
28
|
-
if (isAllowedOrigin) {
|
|
29
|
-
res.headers.set("Access-Control-Allow-Origin", origin === "*" ? "*" : reqOrigin);
|
|
30
|
-
if (credentials) res.headers.set("Access-Control-Allow-Credentials", "true");
|
|
31
|
-
}
|
|
32
|
-
return res;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
//#endregion
|
|
37
|
-
export { createCORS };
|
|
38
|
-
//# sourceMappingURL=cors.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cors.mjs","names":[],"sources":["../../src/middleware/cors.ts"],"sourcesContent":["import type { Middleware } from \"../types\";\n\nexport interface CORSOptions {\n origin?: string[] | \"*\";\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n}\n\nexport function createCORS(options: CORSOptions = {}): Middleware {\n const {\n origin = [],\n methods = [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"],\n headers = [],\n credentials = false,\n maxAge,\n } = options;\n\n return async (req, next) => {\n const reqOrigin = req.headers.get(\"Origin\") || \"\";\n\n // 判断:是否为允许的 Origin?\n const isAllowedOrigin = origin === \"*\" || origin.includes(reqOrigin);\n\n // 预检 (OPTIONS) 请求处理\n if (req.method === \"OPTIONS\") {\n const resHeaders = new Headers();\n\n if (isAllowedOrigin) {\n resHeaders.set(\n \"Access-Control-Allow-Origin\",\n origin === \"*\" ? \"*\" : reqOrigin,\n );\n resHeaders.set(\"Access-Control-Allow-Methods\", methods.join(\",\"));\n resHeaders.set(\"Access-Control-Allow-Headers\", headers.join(\",\"));\n if (credentials)\n resHeaders.set(\"Access-Control-Allow-Credentials\", \"true\");\n if (maxAge) resHeaders.set(\"Access-Control-Max-Age\", maxAge.toString());\n }\n\n return new Response(null, { status: 204, headers: resHeaders });\n }\n\n // 正常请求:在 next 后添加头部\n const res = await next();\n\n if (isAllowedOrigin) {\n res.headers.set(\n \"Access-Control-Allow-Origin\",\n origin === \"*\" ? \"*\" : reqOrigin,\n );\n if (credentials)\n res.headers.set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n return res;\n };\n}\n"],"mappings":";AAUA,SAAgB,WAAW,UAAuB,EAAE,EAAc;CAChE,MAAM,EACJ,SAAS,EAAE,EACX,UAAU;EAAC;EAAO;EAAQ;EAAO;EAAU;EAAU,EACrD,UAAU,EAAE,EACZ,cAAc,OACd,WACE;AAEJ,QAAO,OAAO,KAAK,SAAS;EAC1B,MAAM,YAAY,IAAI,QAAQ,IAAI,SAAS,IAAI;EAG/C,MAAM,kBAAkB,WAAW,OAAO,OAAO,SAAS,UAAU;AAGpE,MAAI,IAAI,WAAW,WAAW;GAC5B,MAAM,aAAa,IAAI,SAAS;AAEhC,OAAI,iBAAiB;AACnB,eAAW,IACT,+BACA,WAAW,MAAM,MAAM,UACxB;AACD,eAAW,IAAI,gCAAgC,QAAQ,KAAK,IAAI,CAAC;AACjE,eAAW,IAAI,gCAAgC,QAAQ,KAAK,IAAI,CAAC;AACjE,QAAI,YACF,YAAW,IAAI,oCAAoC,OAAO;AAC5D,QAAI,OAAQ,YAAW,IAAI,0BAA0B,OAAO,UAAU,CAAC;;AAGzE,UAAO,IAAI,SAAS,MAAM;IAAE,QAAQ;IAAK,SAAS;IAAY,CAAC;;EAIjE,MAAM,MAAM,MAAM,MAAM;AAExB,MAAI,iBAAiB;AACnB,OAAI,QAAQ,IACV,+BACA,WAAW,MAAM,MAAM,UACxB;AACD,OAAI,YACF,KAAI,QAAQ,IAAI,oCAAoC,OAAO;;AAG/D,SAAO"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { o as Middleware } from "../types-Cb7_2VSt.mjs";
|
|
2
|
-
import "../schema-CVuttFSw.mjs";
|
|
3
|
-
import "../index-DXJd7-2Z.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/middleware/rateLimit.d.ts
|
|
6
|
-
interface RateLimitOptions {
|
|
7
|
-
windowMs?: number;
|
|
8
|
-
max?: number;
|
|
9
|
-
keyFn?: (req: Request) => string;
|
|
10
|
-
}
|
|
11
|
-
declare function rateLimit(options?: RateLimitOptions): Middleware;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { rateLimit };
|
|
14
|
-
//# sourceMappingURL=rateLimit.d.mts.map
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { r as init_middleware, t as VafastError } from "../middleware-3ShRJyd1.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/middleware/rateLimit.ts
|
|
4
|
-
init_middleware();
|
|
5
|
-
const store = /* @__PURE__ */ new Map();
|
|
6
|
-
function rateLimit(options = {}) {
|
|
7
|
-
const windowMs = options.windowMs ?? 6e4;
|
|
8
|
-
const max = options.max ?? 30;
|
|
9
|
-
const keyFn = options.keyFn ?? getIP;
|
|
10
|
-
return async (req, next) => {
|
|
11
|
-
const key = keyFn(req);
|
|
12
|
-
const now = Date.now();
|
|
13
|
-
const entry = store.get(key);
|
|
14
|
-
if (entry && entry.expires > now) {
|
|
15
|
-
if (entry.count >= max) throw new VafastError("Too many requests", {
|
|
16
|
-
status: 429,
|
|
17
|
-
type: "rate_limit",
|
|
18
|
-
expose: true
|
|
19
|
-
});
|
|
20
|
-
entry.count += 1;
|
|
21
|
-
} else store.set(key, {
|
|
22
|
-
count: 1,
|
|
23
|
-
expires: now + windowMs
|
|
24
|
-
});
|
|
25
|
-
return next();
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function getIP(req) {
|
|
29
|
-
return req.headers.get("cf-connecting-ip") || req.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || "unknown";
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
//#endregion
|
|
33
|
-
export { rateLimit };
|
|
34
|
-
//# sourceMappingURL=rateLimit.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimit.mjs","names":[],"sources":["../../src/middleware/rateLimit.ts"],"sourcesContent":["// src/middleware/rateLimit.ts\n\nimport type { Middleware } from \"../types\";\nimport { VafastError } from \"../middleware\";\n\ninterface RateLimitOptions {\n windowMs?: number; // 限制窗口(毫秒)\n max?: number; // 最大请求数\n keyFn?: (req: Request) => string;\n}\n\ntype Entry = {\n count: number;\n expires: number;\n};\n\nconst store = new Map<string, Entry>();\n\nexport function rateLimit(options: RateLimitOptions = {}): Middleware {\n const windowMs = options.windowMs ?? 60_000; // 默认: 1分钟\n const max = options.max ?? 30;\n const keyFn = options.keyFn ?? getIP;\n\n return async (req, next) => {\n const key = keyFn(req);\n const now = Date.now();\n\n const entry = store.get(key);\n if (entry && entry.expires > now) {\n if (entry.count >= max) {\n throw new VafastError(\"Too many requests\", {\n status: 429,\n type: \"rate_limit\",\n expose: true,\n });\n }\n entry.count += 1;\n } else {\n store.set(key, { count: 1, expires: now + windowMs });\n }\n\n return next();\n };\n}\n\n// Edge 安全的 IP 获取\nfunction getIP(req: Request): string {\n return (\n req.headers.get(\"cf-connecting-ip\") || // Cloudflare\n req.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim() || // Vercel\n \"unknown\"\n );\n}\n"],"mappings":";;;iBAG4C;AAa5C,MAAM,wBAAQ,IAAI,KAAoB;AAEtC,SAAgB,UAAU,UAA4B,EAAE,EAAc;CACpE,MAAM,WAAW,QAAQ,YAAY;CACrC,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAO,OAAO,KAAK,SAAS;EAC1B,MAAM,MAAM,MAAM,IAAI;EACtB,MAAM,MAAM,KAAK,KAAK;EAEtB,MAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,MAAI,SAAS,MAAM,UAAU,KAAK;AAChC,OAAI,MAAM,SAAS,IACjB,OAAM,IAAI,YAAY,qBAAqB;IACzC,QAAQ;IACR,MAAM;IACN,QAAQ;IACT,CAAC;AAEJ,SAAM,SAAS;QAEf,OAAM,IAAI,KAAK;GAAE,OAAO;GAAG,SAAS,MAAM;GAAU,CAAC;AAGvD,SAAO,MAAM;;;AAKjB,SAAS,MAAM,KAAsB;AACnC,QACE,IAAI,QAAQ,IAAI,mBAAmB,IACnC,IAAI,QAAQ,IAAI,kBAAkB,EAAE,MAAM,IAAI,CAAC,IAAI,MAAM,IACzD"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|