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.
Files changed (163) hide show
  1. package/dist/{base-server-Bq4_lJWK.mjs → base-server-CSkyjEaY.mjs} +2 -2
  2. package/dist/{base-server-Bq4_lJWK.mjs.map → base-server-CSkyjEaY.mjs.map} +1 -1
  3. package/dist/{base-server-Gakrozqk.d.mts → base-server-DvGS6ATg.d.mts} +2 -2
  4. package/dist/{base64url-BY-HBSpL.d.mts → base64url-0N9uQPjZ.d.mts} +1 -1
  5. package/dist/{base64url-DLDOeXsk.mjs → base64url-CwQnvZyp.mjs} +1 -1
  6. package/dist/{base64url-DLDOeXsk.mjs.map → base64url-CwQnvZyp.mjs.map} +1 -1
  7. package/dist/{component-route-BYV_X1rA.d.mts → component-route-CZawYn61.d.mts} +2 -2
  8. package/dist/{component-router-DXUXLp1R.mjs → component-router-CErbGh2A.mjs} +2 -2
  9. package/dist/{component-router-DXUXLp1R.mjs.map → component-router-CErbGh2A.mjs.map} +1 -1
  10. package/dist/{component-server-BOz4Q-Qt.d.mts → component-server-CGzU4bss.d.mts} +4 -4
  11. package/dist/{component-server-ARXvZJUQ.mjs → component-server-DAbIyIPI.mjs} +7 -7
  12. package/dist/{component-server-ARXvZJUQ.mjs.map → component-server-DAbIyIPI.mjs.map} +1 -1
  13. package/dist/{create-handler-CbSoroA1.mjs → create-handler-B_pfxh3m.mjs} +5 -5
  14. package/dist/{create-handler-CbSoroA1.mjs.map → create-handler-B_pfxh3m.mjs.map} +1 -1
  15. package/dist/{create-handler-Dtt0xv6g.d.mts → create-handler-Bo-hvWp-.d.mts} +2 -2
  16. package/dist/defineRoute.d.mts +3 -3
  17. package/dist/{dependency-manager-Dbug5INp.d.mts → dependency-manager-C6vFWP2L.d.mts} +1 -1
  18. package/dist/{dependency-manager-CPkwMI7J.mjs → dependency-manager-Czg7Po2j.mjs} +2 -2
  19. package/dist/{dependency-manager-CPkwMI7J.mjs.map → dependency-manager-Czg7Po2j.mjs.map} +1 -1
  20. package/dist/{formats-BSqJWCsG.d.mts → formats-CYLwo9GJ.d.mts} +1 -1
  21. package/dist/{go-await-B-KP-K8x.mjs → go-await-BGAGJfrB.mjs} +1 -1
  22. package/dist/{go-await-B-KP-K8x.mjs.map → go-await-BGAGJfrB.mjs.map} +1 -1
  23. package/dist/{go-await-CqPx9dVQ.d.mts → go-await-DRItVwwh.d.mts} +1 -1
  24. package/dist/{handle-BhpqNgGf.mjs → handle-Csjtywdc.mjs} +2 -2
  25. package/dist/{handle-BhpqNgGf.mjs.map → handle-Csjtywdc.mjs.map} +1 -1
  26. package/dist/{handle-DOidKTI-.d.mts → handle-D0TFoOiX.d.mts} +1 -1
  27. package/dist/{html-renderer-C3LKTLme.d.mts → html-renderer-CMGKJoIy.d.mts} +1 -1
  28. package/dist/{html-renderer-CJ3B2Hft.mjs → html-renderer-CczE8mwC.mjs} +2 -2
  29. package/dist/{html-renderer-CJ3B2Hft.mjs.map → html-renderer-CczE8mwC.mjs.map} +1 -1
  30. package/dist/{index-DFsQyT61.d.mts → index-Ci52vt55.d.mts} +5 -5
  31. package/dist/index.d.mts +24 -29
  32. package/dist/index.mjs +22 -27
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/middleware/component-router.d.mts +1 -1
  35. package/dist/middleware/component-router.mjs +1 -1
  36. package/dist/{middleware-3ShRJyd1.mjs → middleware-Byp3Hjae.mjs} +3 -3
  37. package/dist/{middleware-3ShRJyd1.mjs.map → middleware-Byp3Hjae.mjs.map} +1 -1
  38. package/dist/middleware.d.mts +3 -3
  39. package/dist/middleware.mjs +1 -1
  40. package/dist/monitoring/index.d.mts +6 -6
  41. package/dist/monitoring/index.mjs +3 -3
  42. package/dist/monitoring/native-monitor.d.mts +6 -6
  43. package/dist/monitoring/native-monitor.mjs +4 -4
  44. package/dist/node-server/index.d.mts +1 -1
  45. package/dist/node-server/index.mjs +3 -3
  46. package/dist/node-server/request.mjs +1 -1
  47. package/dist/node-server/response.mjs +1 -1
  48. package/dist/node-server/serve.d.mts +1 -1
  49. package/dist/node-server/serve.mjs +2 -2
  50. package/dist/{parsers-CodQFP1Z.d.mts → parsers-7lvt3Oss.d.mts} +1 -1
  51. package/dist/{parsers-ROIZWSGI.mjs → parsers-CI_TZ7pO.mjs} +1 -1
  52. package/dist/{parsers-ROIZWSGI.mjs.map → parsers-CI_TZ7pO.mjs.map} +1 -1
  53. package/dist/{path-matcher-CXMJ-IrG.mjs → path-matcher-73cJd5Y7.mjs} +2 -2
  54. package/dist/{path-matcher-CXMJ-IrG.mjs.map → path-matcher-73cJd5Y7.mjs.map} +1 -1
  55. package/dist/{radix-tree-BWmhTLhT.mjs → radix-tree-D0XYaJKb.mjs} +2 -2
  56. package/dist/{radix-tree-BWmhTLhT.mjs.map → radix-tree-D0XYaJKb.mjs.map} +1 -1
  57. package/dist/{request-B2BkUecT.mjs → request-CKC3Ox6M.mjs} +1 -1
  58. package/dist/{request-B2BkUecT.mjs.map → request-CKC3Ox6M.mjs.map} +1 -1
  59. package/dist/{request-validator-u2Ccj3_x.d.mts → request-validator-42lY21gn.d.mts} +2 -2
  60. package/dist/{request-validator-Dyqng-H_.mjs → request-validator-_J5HloRq.mjs} +3 -3
  61. package/dist/{request-validator-Dyqng-H_.mjs.map → request-validator-_J5HloRq.mjs.map} +1 -1
  62. package/dist/{response-CUyV5FIm.d.mts → response-A-sZZiJ7.d.mts} +1 -1
  63. package/dist/{response-BhFKEphr.mjs → response-Cf5FgtmE.mjs} +1 -1
  64. package/dist/{response-BhFKEphr.mjs.map → response-Cf5FgtmE.mjs.map} +1 -1
  65. package/dist/{response-CSKW5hsS.mjs → response-DXg4i_yh.mjs} +2 -2
  66. package/dist/{response-CSKW5hsS.mjs.map → response-DXg4i_yh.mjs.map} +1 -1
  67. package/dist/{route-BRR15b-p.mjs → route-9pAVP1GC.mjs} +1 -1
  68. package/dist/{route-BRR15b-p.mjs.map → route-9pAVP1GC.mjs.map} +1 -1
  69. package/dist/{route-BqmWCG4e.d.mts → route-BJ-40LNI.d.mts} +2 -2
  70. package/dist/{route-registry-ykzRmaHB.d.mts → route-registry--tx1PNui.d.mts} +2 -2
  71. package/dist/{route-registry-AlkDgbcE.mjs → route-registry-mcTG0M-t.mjs} +2 -2
  72. package/dist/{route-registry-AlkDgbcE.mjs.map → route-registry-mcTG0M-t.mjs.map} +1 -1
  73. package/dist/router/index.d.mts +2 -2
  74. package/dist/router/index.mjs +2 -2
  75. package/dist/router/radix-tree.d.mts +3 -3
  76. package/dist/router/radix-tree.mjs +1 -1
  77. package/dist/{router-BOeVQrjz.mjs → router-B9HUUCkR.mjs} +2 -2
  78. package/dist/{router-BOeVQrjz.mjs.map → router-B9HUUCkR.mjs.map} +1 -1
  79. package/dist/router.d.mts +3 -3
  80. package/dist/router.mjs +1 -1
  81. package/dist/{schema-CVuttFSw.d.mts → schema-CPQudJpE.d.mts} +1 -1
  82. package/dist/{serve-BQQ2JzIH.d.mts → serve-B5WmhK6m.d.mts} +1 -1
  83. package/dist/{serve-MRGGK7-q.mjs → serve-Be6NvuQk.mjs} +3 -3
  84. package/dist/{serve-MRGGK7-q.mjs.map → serve-Be6NvuQk.mjs.map} +1 -1
  85. package/dist/serve.d.mts +1 -1
  86. package/dist/serve.mjs +2 -2
  87. package/dist/server/base-server.d.mts +3 -3
  88. package/dist/server/base-server.mjs +1 -1
  89. package/dist/server/component-server.d.mts +4 -4
  90. package/dist/server/component-server.mjs +2 -2
  91. package/dist/server/index.d.mts +6 -6
  92. package/dist/server/index.mjs +5 -5
  93. package/dist/server/server-factory.d.mts +6 -6
  94. package/dist/server/server-factory.mjs +3 -3
  95. package/dist/server/server.d.mts +4 -4
  96. package/dist/server/server.mjs +1 -1
  97. package/dist/{server-C8WCshmG.mjs → server-BmPKs8oM.mjs} +8 -8
  98. package/dist/{server-C8WCshmG.mjs.map → server-BmPKs8oM.mjs.map} +1 -1
  99. package/dist/{server-B0nzGCG5.mjs → server-Cbd3Ia51.mjs} +5 -5
  100. package/dist/{server-B0nzGCG5.mjs.map → server-Cbd3Ia51.mjs.map} +1 -1
  101. package/dist/{server-Drc2kSxp.d.mts → server-D9gjszHe.d.mts} +3 -3
  102. package/dist/{sse-BOd2pvUK.d.mts → sse-BMM6KTfy.d.mts} +2 -2
  103. package/dist/{sse-US5D9mgE.mjs → sse-BT5yyLgX.mjs} +3 -3
  104. package/dist/{sse-US5D9mgE.mjs.map → sse-BT5yyLgX.mjs.map} +1 -1
  105. package/dist/types/component-route.d.mts +1 -1
  106. package/dist/types/index.d.mts +5 -5
  107. package/dist/types/index.mjs +1 -1
  108. package/dist/types/route.d.mts +1 -1
  109. package/dist/types/route.mjs +1 -1
  110. package/dist/types/schema.d.mts +1 -1
  111. package/dist/types/types.d.mts +1 -1
  112. package/dist/{types-Cb7_2VSt.d.mts → types-DuTa8AVN.d.mts} +1 -1
  113. package/dist/utils/base64url.d.mts +1 -1
  114. package/dist/utils/base64url.mjs +1 -1
  115. package/dist/utils/create-handler.d.mts +2 -2
  116. package/dist/utils/create-handler.mjs +3 -3
  117. package/dist/utils/dependency-manager.d.mts +1 -1
  118. package/dist/utils/dependency-manager.mjs +1 -1
  119. package/dist/utils/formats.d.mts +1 -1
  120. package/dist/utils/go-await.d.mts +1 -1
  121. package/dist/utils/go-await.mjs +1 -1
  122. package/dist/utils/handle.d.mts +1 -1
  123. package/dist/utils/handle.mjs +2 -2
  124. package/dist/utils/html-renderer.d.mts +1 -1
  125. package/dist/utils/html-renderer.mjs +1 -1
  126. package/dist/utils/index.d.mts +15 -15
  127. package/dist/utils/index.mjs +12 -12
  128. package/dist/utils/parsers.d.mts +1 -1
  129. package/dist/utils/parsers.mjs +1 -1
  130. package/dist/utils/path-matcher.mjs +1 -1
  131. package/dist/utils/request-validator.d.mts +2 -2
  132. package/dist/utils/request-validator.mjs +3 -3
  133. package/dist/utils/response.d.mts +1 -1
  134. package/dist/utils/response.mjs +1 -1
  135. package/dist/utils/route-registry.d.mts +3 -3
  136. package/dist/utils/route-registry.mjs +1 -1
  137. package/dist/utils/sse.d.mts +2 -2
  138. package/dist/utils/sse.mjs +3 -3
  139. package/dist/utils/validators/validators.d.mts +1 -1
  140. package/dist/utils/validators/validators.mjs +1 -1
  141. package/dist/{validators-CbCLj0Rc.mjs → validators-BBrGePBr.mjs} +1 -1
  142. package/dist/{validators-CbCLj0Rc.mjs.map → validators-BBrGePBr.mjs.map} +1 -1
  143. package/dist/{validators-C0eZyxPh.d.mts → validators-CPmnj_y9.d.mts} +1 -1
  144. package/package.json +1 -1
  145. package/dist/auth/token.d.mts +0 -44
  146. package/dist/auth/token.mjs +0 -105
  147. package/dist/auth/token.mjs.map +0 -1
  148. package/dist/middleware/auth.d.mts +0 -20
  149. package/dist/middleware/auth.mjs +0 -98
  150. package/dist/middleware/auth.mjs.map +0 -1
  151. package/dist/middleware/authMiddleware.d.mts +0 -9
  152. package/dist/middleware/authMiddleware.mjs +0 -19
  153. package/dist/middleware/authMiddleware.mjs.map +0 -1
  154. package/dist/middleware/cors.d.mts +0 -16
  155. package/dist/middleware/cors.mjs +0 -38
  156. package/dist/middleware/cors.mjs.map +0 -1
  157. package/dist/middleware/rateLimit.d.mts +0 -14
  158. package/dist/middleware/rateLimit.mjs +0 -34
  159. package/dist/middleware/rateLimit.mjs.map +0 -1
  160. /package/dist/{chunk-67U6L5Jh.mjs → chunk-DW4-Jl94.mjs} +0 -0
  161. /package/dist/{component-route-Do2yyYTi.mjs → component-route-CYxLOnci.mjs} +0 -0
  162. /package/dist/{index-DXJd7-2Z.d.mts → index-CzItj62a.d.mts} +0 -0
  163. /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
@@ -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
@@ -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