@morojs/moro 1.0.0 → 1.0.1

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 (284) hide show
  1. package/README.md +1 -1
  2. package/dist/core/config/index.d.ts +5 -5
  3. package/dist/core/config/index.js +1 -1
  4. package/dist/core/config/index.js.map +1 -1
  5. package/dist/core/config/loader.d.ts +1 -1
  6. package/dist/core/config/loader.js +58 -82
  7. package/dist/core/config/loader.js.map +1 -1
  8. package/dist/core/config/schema.d.ts +1 -1
  9. package/dist/core/config/schema.js +52 -111
  10. package/dist/core/config/schema.js.map +1 -1
  11. package/dist/core/config/utils.d.ts +2 -2
  12. package/dist/core/config/utils.js +18 -18
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  15. package/dist/core/database/adapters/drizzle.js +39 -55
  16. package/dist/core/database/adapters/drizzle.js.map +1 -1
  17. package/dist/core/database/adapters/index.d.ts +7 -7
  18. package/dist/core/database/adapters/index.js +11 -11
  19. package/dist/core/database/adapters/index.js.map +1 -1
  20. package/dist/core/database/adapters/mongodb.d.ts +1 -1
  21. package/dist/core/database/adapters/mongodb.js +19 -23
  22. package/dist/core/database/adapters/mongodb.js.map +1 -1
  23. package/dist/core/database/adapters/mysql.d.ts +1 -1
  24. package/dist/core/database/adapters/mysql.js +31 -27
  25. package/dist/core/database/adapters/mysql.js.map +1 -1
  26. package/dist/core/database/adapters/postgresql.d.ts +1 -1
  27. package/dist/core/database/adapters/postgresql.js +27 -35
  28. package/dist/core/database/adapters/postgresql.js.map +1 -1
  29. package/dist/core/database/adapters/redis.d.ts +1 -1
  30. package/dist/core/database/adapters/redis.js +24 -24
  31. package/dist/core/database/adapters/redis.js.map +1 -1
  32. package/dist/core/database/adapters/sqlite.d.ts +1 -1
  33. package/dist/core/database/adapters/sqlite.js +36 -36
  34. package/dist/core/database/adapters/sqlite.js.map +1 -1
  35. package/dist/core/database/index.d.ts +2 -2
  36. package/dist/core/docs/index.d.ts +7 -7
  37. package/dist/core/docs/index.js +13 -15
  38. package/dist/core/docs/index.js.map +1 -1
  39. package/dist/core/docs/openapi-generator.d.ts +5 -5
  40. package/dist/core/docs/openapi-generator.js +93 -94
  41. package/dist/core/docs/openapi-generator.js.map +1 -1
  42. package/dist/core/docs/simple-docs.d.ts +1 -1
  43. package/dist/core/docs/simple-docs.js +25 -28
  44. package/dist/core/docs/simple-docs.js.map +1 -1
  45. package/dist/core/docs/swagger-ui.d.ts +2 -2
  46. package/dist/core/docs/swagger-ui.js +46 -51
  47. package/dist/core/docs/swagger-ui.js.map +1 -1
  48. package/dist/core/docs/zod-to-openapi.d.ts +1 -1
  49. package/dist/core/docs/zod-to-openapi.js +115 -125
  50. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  51. package/dist/core/events/event-bus.d.ts +1 -1
  52. package/dist/core/events/event-bus.js +15 -21
  53. package/dist/core/events/event-bus.js.map +1 -1
  54. package/dist/core/events/index.d.ts +2 -2
  55. package/dist/core/framework.d.ts +5 -5
  56. package/dist/core/framework.js +55 -60
  57. package/dist/core/framework.js.map +1 -1
  58. package/dist/core/http/http-server.d.ts +2 -2
  59. package/dist/core/http/http-server.js +228 -261
  60. package/dist/core/http/http-server.js.map +1 -1
  61. package/dist/core/http/index.d.ts +3 -3
  62. package/dist/core/http/router.d.ts +1 -1
  63. package/dist/core/http/router.js +15 -17
  64. package/dist/core/http/router.js.map +1 -1
  65. package/dist/core/logger/filters.d.ts +1 -1
  66. package/dist/core/logger/filters.js +16 -16
  67. package/dist/core/logger/filters.js.map +1 -1
  68. package/dist/core/logger/index.d.ts +3 -3
  69. package/dist/core/logger/logger.d.ts +1 -1
  70. package/dist/core/logger/logger.js +48 -59
  71. package/dist/core/logger/logger.js.map +1 -1
  72. package/dist/core/logger/outputs.d.ts +4 -4
  73. package/dist/core/logger/outputs.js +16 -20
  74. package/dist/core/logger/outputs.js.map +1 -1
  75. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  76. package/dist/core/middleware/built-in/adapters/cache/file.js +19 -19
  77. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  78. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  79. package/dist/core/middleware/built-in/adapters/cache/index.js +3 -3
  80. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  81. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  82. package/dist/core/middleware/built-in/adapters/cache/memory.js +5 -5
  83. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  84. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +1 -1
  85. package/dist/core/middleware/built-in/adapters/cache/redis.js +18 -18
  86. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  87. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  88. package/dist/core/middleware/built-in/adapters/cdn/azure.js +8 -8
  89. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  90. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  91. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +14 -14
  92. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  93. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +1 -1
  94. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +13 -15
  95. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  97. package/dist/core/middleware/built-in/adapters/cdn/index.js +3 -3
  98. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  99. package/dist/core/middleware/built-in/auth.d.ts +1 -1
  100. package/dist/core/middleware/built-in/auth.js +14 -14
  101. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  102. package/dist/core/middleware/built-in/cache.js +43 -45
  103. package/dist/core/middleware/built-in/cache.js.map +1 -1
  104. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  105. package/dist/core/middleware/built-in/cdn.js +27 -29
  106. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  107. package/dist/core/middleware/built-in/cookie.d.ts +2 -2
  108. package/dist/core/middleware/built-in/cookie.js +17 -17
  109. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  110. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  111. package/dist/core/middleware/built-in/cors.js +13 -13
  112. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  113. package/dist/core/middleware/built-in/csp.js +22 -25
  114. package/dist/core/middleware/built-in/csp.js.map +1 -1
  115. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  116. package/dist/core/middleware/built-in/csrf.js +21 -24
  117. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  118. package/dist/core/middleware/built-in/error-tracker.js +2 -2
  119. package/dist/core/middleware/built-in/index.d.ts +14 -14
  120. package/dist/core/middleware/built-in/performance-monitor.js +2 -2
  121. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  122. package/dist/core/middleware/built-in/rate-limit.js +12 -12
  123. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  124. package/dist/core/middleware/built-in/session.d.ts +5 -5
  125. package/dist/core/middleware/built-in/session.js +35 -38
  126. package/dist/core/middleware/built-in/session.js.map +1 -1
  127. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  128. package/dist/core/middleware/built-in/sse.js +20 -22
  129. package/dist/core/middleware/built-in/sse.js.map +1 -1
  130. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  131. package/dist/core/middleware/built-in/validation.js +13 -13
  132. package/dist/core/middleware/index.d.ts +5 -5
  133. package/dist/core/middleware/index.js +16 -16
  134. package/dist/core/middleware/index.js.map +1 -1
  135. package/dist/core/modules/auto-discovery.d.ts +2 -2
  136. package/dist/core/modules/auto-discovery.js +12 -13
  137. package/dist/core/modules/auto-discovery.js.map +1 -1
  138. package/dist/core/modules/index.d.ts +2 -2
  139. package/dist/core/modules/index.js.map +1 -1
  140. package/dist/core/modules/modules.d.ts +3 -3
  141. package/dist/core/modules/modules.js +3 -6
  142. package/dist/core/modules/modules.js.map +1 -1
  143. package/dist/core/networking/index.d.ts +2 -2
  144. package/dist/core/networking/index.js.map +1 -1
  145. package/dist/core/networking/service-discovery.d.ts +2 -2
  146. package/dist/core/networking/service-discovery.js +27 -27
  147. package/dist/core/networking/service-discovery.js.map +1 -1
  148. package/dist/core/networking/websocket-manager.d.ts +3 -3
  149. package/dist/core/networking/websocket-manager.js +15 -16
  150. package/dist/core/networking/websocket-manager.js.map +1 -1
  151. package/dist/core/routing/app-integration.d.ts +2 -2
  152. package/dist/core/routing/app-integration.js +13 -13
  153. package/dist/core/routing/app-integration.js.map +1 -1
  154. package/dist/core/routing/index.d.ts +3 -3
  155. package/dist/core/routing/index.js +43 -52
  156. package/dist/core/routing/index.js.map +1 -1
  157. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  158. package/dist/core/runtime/aws-lambda-adapter.js +14 -16
  159. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  160. package/dist/core/runtime/base-adapter.d.ts +2 -2
  161. package/dist/core/runtime/base-adapter.js +11 -12
  162. package/dist/core/runtime/base-adapter.js.map +1 -1
  163. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  164. package/dist/core/runtime/cloudflare-workers-adapter.js +20 -21
  165. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  166. package/dist/core/runtime/index.d.ts +9 -9
  167. package/dist/core/runtime/index.js +4 -4
  168. package/dist/core/runtime/index.js.map +1 -1
  169. package/dist/core/runtime/node-adapter.d.ts +5 -5
  170. package/dist/core/runtime/node-adapter.js +35 -35
  171. package/dist/core/runtime/node-adapter.js.map +1 -1
  172. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  173. package/dist/core/runtime/vercel-edge-adapter.js +12 -15
  174. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  175. package/dist/core/utilities/circuit-breaker.js +6 -6
  176. package/dist/core/utilities/container.d.ts +1 -1
  177. package/dist/core/utilities/container.js +17 -22
  178. package/dist/core/utilities/container.js.map +1 -1
  179. package/dist/core/utilities/hooks.d.ts +3 -3
  180. package/dist/core/utilities/hooks.js +11 -11
  181. package/dist/core/utilities/hooks.js.map +1 -1
  182. package/dist/core/utilities/index.d.ts +4 -4
  183. package/dist/core/validation/index.d.ts +3 -3
  184. package/dist/core/validation/index.js +15 -15
  185. package/dist/core/validation/index.js.map +1 -1
  186. package/dist/index.d.ts +31 -30
  187. package/dist/index.js +28 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/moro.d.ts +14 -14
  190. package/dist/moro.js +79 -88
  191. package/dist/moro.js.map +1 -1
  192. package/dist/types/cache.d.ts +1 -1
  193. package/dist/types/core.d.ts +2 -2
  194. package/dist/types/events.d.ts +19 -19
  195. package/dist/types/hooks.d.ts +1 -1
  196. package/dist/types/http.d.ts +2 -2
  197. package/dist/types/logger.d.ts +3 -3
  198. package/dist/types/module.d.ts +2 -2
  199. package/dist/types/runtime.d.ts +2 -2
  200. package/dist/types/session.d.ts +4 -4
  201. package/package.json +180 -164
  202. package/src/core/config/index.ts +7 -9
  203. package/src/core/config/loader.ts +86 -158
  204. package/src/core/config/schema.ts +59 -122
  205. package/src/core/config/utils.ts +27 -45
  206. package/src/core/database/adapters/drizzle.ts +53 -75
  207. package/src/core/database/adapters/index.ts +26 -29
  208. package/src/core/database/adapters/mongodb.ts +31 -54
  209. package/src/core/database/adapters/mysql.ts +40 -50
  210. package/src/core/database/adapters/postgresql.ts +32 -42
  211. package/src/core/database/adapters/redis.ts +31 -36
  212. package/src/core/database/adapters/sqlite.ts +43 -51
  213. package/src/core/database/index.ts +2 -2
  214. package/src/core/docs/index.ts +25 -39
  215. package/src/core/docs/openapi-generator.ts +104 -117
  216. package/src/core/docs/simple-docs.ts +29 -39
  217. package/src/core/docs/swagger-ui.ts +57 -76
  218. package/src/core/docs/zod-to-openapi.ts +121 -153
  219. package/src/core/events/event-bus.ts +22 -45
  220. package/src/core/events/index.ts +2 -2
  221. package/src/core/framework.ts +119 -197
  222. package/src/core/http/http-server.ts +260 -360
  223. package/src/core/http/index.ts +3 -8
  224. package/src/core/http/router.ts +19 -31
  225. package/src/core/logger/filters.ts +19 -22
  226. package/src/core/logger/index.ts +3 -3
  227. package/src/core/logger/logger.ts +59 -100
  228. package/src/core/logger/outputs.ts +23 -27
  229. package/src/core/middleware/built-in/adapters/cache/file.ts +21 -23
  230. package/src/core/middleware/built-in/adapters/cache/index.ts +11 -14
  231. package/src/core/middleware/built-in/adapters/cache/memory.ts +7 -7
  232. package/src/core/middleware/built-in/adapters/cache/redis.ts +21 -24
  233. package/src/core/middleware/built-in/adapters/cdn/azure.ts +10 -18
  234. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +19 -36
  235. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +17 -26
  236. package/src/core/middleware/built-in/adapters/cdn/index.ts +10 -10
  237. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  238. package/src/core/middleware/built-in/auth.ts +16 -16
  239. package/src/core/middleware/built-in/cache.ts +50 -67
  240. package/src/core/middleware/built-in/cdn.ts +34 -61
  241. package/src/core/middleware/built-in/cookie.ts +23 -28
  242. package/src/core/middleware/built-in/cors.ts +17 -17
  243. package/src/core/middleware/built-in/csp.ts +25 -31
  244. package/src/core/middleware/built-in/csrf.ts +24 -29
  245. package/src/core/middleware/built-in/error-tracker.ts +3 -3
  246. package/src/core/middleware/built-in/index.ts +28 -28
  247. package/src/core/middleware/built-in/performance-monitor.ts +4 -4
  248. package/src/core/middleware/built-in/rate-limit.ts +15 -15
  249. package/src/core/middleware/built-in/request-logger.ts +1 -3
  250. package/src/core/middleware/built-in/session.ts +47 -70
  251. package/src/core/middleware/built-in/sse.ts +23 -28
  252. package/src/core/middleware/built-in/validation.ts +15 -15
  253. package/src/core/middleware/index.ts +26 -37
  254. package/src/core/modules/auto-discovery.ts +21 -31
  255. package/src/core/modules/index.ts +2 -5
  256. package/src/core/modules/modules.ts +11 -20
  257. package/src/core/networking/index.ts +2 -6
  258. package/src/core/networking/service-discovery.ts +41 -61
  259. package/src/core/networking/websocket-manager.ts +27 -36
  260. package/src/core/routing/app-integration.ts +19 -32
  261. package/src/core/routing/index.ts +57 -88
  262. package/src/core/runtime/aws-lambda-adapter.ts +20 -30
  263. package/src/core/runtime/base-adapter.ts +17 -27
  264. package/src/core/runtime/cloudflare-workers-adapter.ts +28 -42
  265. package/src/core/runtime/index.ts +21 -33
  266. package/src/core/runtime/node-adapter.ts +59 -73
  267. package/src/core/runtime/vercel-edge-adapter.ts +18 -29
  268. package/src/core/utilities/circuit-breaker.ts +7 -7
  269. package/src/core/utilities/container.ts +52 -89
  270. package/src/core/utilities/hooks.ts +17 -23
  271. package/src/core/utilities/index.ts +4 -4
  272. package/src/core/validation/index.ts +25 -51
  273. package/src/index.ts +58 -60
  274. package/src/moro.ts +119 -191
  275. package/src/types/cache.ts +1 -1
  276. package/src/types/core.ts +2 -2
  277. package/src/types/database.ts +2 -10
  278. package/src/types/events.ts +23 -31
  279. package/src/types/hooks.ts +1 -1
  280. package/src/types/http.ts +5 -8
  281. package/src/types/logger.ts +7 -23
  282. package/src/types/module.ts +2 -2
  283. package/src/types/runtime.ts +6 -21
  284. package/src/types/session.ts +4 -4
@@ -1,15 +1,15 @@
1
1
  // Cookie Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { createFrameworkLogger } from "../../logger";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
- const logger = createFrameworkLogger("CookieMiddleware");
5
+ const logger = createFrameworkLogger('CookieMiddleware');
6
6
 
7
7
  export interface CookieOptions {
8
8
  maxAge?: number;
9
9
  expires?: Date;
10
10
  httpOnly?: boolean;
11
11
  secure?: boolean;
12
- sameSite?: "strict" | "lax" | "none";
12
+ sameSite?: 'strict' | 'lax' | 'none';
13
13
  domain?: string;
14
14
  path?: string;
15
15
  }
@@ -18,58 +18,53 @@ export const cookie = (
18
18
  options: {
19
19
  secret?: string;
20
20
  signed?: boolean;
21
- } = {},
21
+ } = {}
22
22
  ): MiddlewareInterface => ({
23
- name: "cookie",
24
- version: "1.0.0",
23
+ name: 'cookie',
24
+ version: '1.0.0',
25
25
  metadata: {
26
- name: "cookie",
27
- version: "1.0.0",
28
- description: "Cookie parsing and setting middleware with security features",
29
- author: "MoroJS Team",
26
+ name: 'cookie',
27
+ version: '1.0.0',
28
+ description: 'Cookie parsing and setting middleware with security features',
29
+ author: 'MoroJS Team',
30
30
  },
31
31
 
32
32
  install: async (hooks: any, options: any = {}) => {
33
- logger.debug("Installing cookie middleware", "Installation");
33
+ logger.debug('Installing cookie middleware', 'Installation');
34
34
 
35
- hooks.before("request", async (context: HookContext) => {
35
+ hooks.before('request', async (context: HookContext) => {
36
36
  const req = context.request as any;
37
37
  const res = context.response as any;
38
38
 
39
39
  // Parse cookies from request
40
- req.cookies = parseCookies(req.headers.cookie || "");
40
+ req.cookies = parseCookies(req.headers.cookie || '');
41
41
 
42
42
  // Add cookie methods to response
43
- res.cookie = (
44
- name: string,
45
- value: string,
46
- options: CookieOptions = {},
47
- ) => {
43
+ res.cookie = (name: string, value: string, options: CookieOptions = {}) => {
48
44
  const cookieValue = encodeURIComponent(value);
49
45
  let cookieString = `${name}=${cookieValue}`;
50
46
 
51
47
  if (options.maxAge) cookieString += `; Max-Age=${options.maxAge}`;
52
- if (options.expires)
53
- cookieString += `; Expires=${options.expires.toUTCString()}`;
54
- if (options.httpOnly) cookieString += "; HttpOnly";
55
- if (options.secure) cookieString += "; Secure";
48
+ if (options.expires) cookieString += `; Expires=${options.expires.toUTCString()}`;
49
+ if (options.httpOnly) cookieString += '; HttpOnly';
50
+ if (options.secure) cookieString += '; Secure';
56
51
  if (options.sameSite) cookieString += `; SameSite=${options.sameSite}`;
57
52
  if (options.domain) cookieString += `; Domain=${options.domain}`;
58
53
  if (options.path) cookieString += `; Path=${options.path}`;
59
54
 
60
- const existingCookies = res.getHeader("Set-Cookie") || [];
55
+ const existingCookies = res.getHeader('Set-Cookie') || [];
61
56
  const cookies = Array.isArray(existingCookies)
62
57
  ? [...existingCookies]
63
58
  : [existingCookies as string];
64
59
  cookies.push(cookieString);
65
- res.setHeader("Set-Cookie", cookies);
60
+ res.setHeader('Set-Cookie', cookies);
66
61
 
67
62
  return res;
68
63
  };
69
64
 
70
65
  res.clearCookie = (name: string, options: CookieOptions = {}) => {
71
66
  const clearOptions = { ...options, expires: new Date(0), maxAge: 0 };
72
- return res.cookie(name, "", clearOptions);
67
+ return res.cookie(name, '', clearOptions);
73
68
  };
74
69
  });
75
70
  },
@@ -79,8 +74,8 @@ function parseCookies(cookieHeader: string): Record<string, string> {
79
74
  const cookies: Record<string, string> = {};
80
75
  if (!cookieHeader) return cookies;
81
76
 
82
- cookieHeader.split(";").forEach((cookie) => {
83
- const [name, value] = cookie.trim().split("=");
77
+ cookieHeader.split(';').forEach(cookie => {
78
+ const [name, value] = cookie.trim().split('=');
84
79
  if (name && value) {
85
80
  cookies[name] = decodeURIComponent(value);
86
81
  }
@@ -1,37 +1,37 @@
1
1
  // CORS Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { createFrameworkLogger } from "../../logger";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
- const logger = createFrameworkLogger("CorsMiddleware");
5
+ const logger = createFrameworkLogger('CorsMiddleware');
6
6
 
7
7
  export const cors = (options: any = {}): MiddlewareInterface => ({
8
- name: "cors",
9
- version: "1.0.0",
8
+ name: 'cors',
9
+ version: '1.0.0',
10
10
  metadata: {
11
- name: "cors",
12
- version: "1.0.0",
13
- description: "Cross-Origin Resource Sharing middleware",
14
- author: "MoroJS Team",
11
+ name: 'cors',
12
+ version: '1.0.0',
13
+ description: 'Cross-Origin Resource Sharing middleware',
14
+ author: 'MoroJS Team',
15
15
  },
16
16
 
17
17
  install: async (hooks: any, options: any = {}) => {
18
- logger.debug("Installing CORS middleware", "Installation", { options });
18
+ logger.debug('Installing CORS middleware', 'Installation', { options });
19
19
 
20
- hooks.before("request", async (context: HookContext) => {
20
+ hooks.before('request', async (context: HookContext) => {
21
21
  const response = context.response as any;
22
22
 
23
- response.setHeader("Access-Control-Allow-Origin", options.origin || "*");
23
+ response.setHeader('Access-Control-Allow-Origin', options.origin || '*');
24
24
  response.setHeader(
25
- "Access-Control-Allow-Methods",
26
- options.methods || "GET,POST,PUT,DELETE,OPTIONS",
25
+ 'Access-Control-Allow-Methods',
26
+ options.methods || 'GET,POST,PUT,DELETE,OPTIONS'
27
27
  );
28
28
  response.setHeader(
29
- "Access-Control-Allow-Headers",
30
- options.headers || "Content-Type,Authorization",
29
+ 'Access-Control-Allow-Headers',
30
+ options.headers || 'Content-Type,Authorization'
31
31
  );
32
32
 
33
33
  if (options.credentials) {
34
- response.setHeader("Access-Control-Allow-Credentials", "true");
34
+ response.setHeader('Access-Control-Allow-Credentials', 'true');
35
35
  }
36
36
  });
37
37
  },
@@ -1,8 +1,8 @@
1
1
  // Content Security Policy Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { createFrameworkLogger } from "../../logger";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
- const logger = createFrameworkLogger("CSPMiddleware");
5
+ const logger = createFrameworkLogger('CSPMiddleware');
6
6
 
7
7
  export const csp = (
8
8
  options: {
@@ -25,22 +25,21 @@ export const csp = (
25
25
  reportOnly?: boolean;
26
26
  reportUri?: string;
27
27
  nonce?: boolean;
28
- } = {},
28
+ } = {}
29
29
  ): MiddlewareInterface => ({
30
- name: "csp",
31
- version: "1.0.0",
30
+ name: 'csp',
31
+ version: '1.0.0',
32
32
  metadata: {
33
- name: "csp",
34
- version: "1.0.0",
35
- description:
36
- "Content Security Policy middleware with nonce support and violation reporting",
37
- author: "MoroJS Team",
33
+ name: 'csp',
34
+ version: '1.0.0',
35
+ description: 'Content Security Policy middleware with nonce support and violation reporting',
36
+ author: 'MoroJS Team',
38
37
  },
39
38
 
40
39
  install: async (hooks: any, middlewareOptions: any = {}) => {
41
- logger.debug("Installing CSP middleware", "Installation");
40
+ logger.debug('Installing CSP middleware', 'Installation');
42
41
 
43
- hooks.before("request", async (context: HookContext) => {
42
+ hooks.before('request', async (context: HookContext) => {
44
43
  const req = context.request as any;
45
44
  const res = context.response as any;
46
45
 
@@ -48,7 +47,7 @@ export const csp = (
48
47
  defaultSrc: ["'self'"],
49
48
  scriptSrc: ["'self'"],
50
49
  styleSrc: ["'self'", "'unsafe-inline'"],
51
- imgSrc: ["'self'", "data:", "https:"],
50
+ imgSrc: ["'self'", 'data:', 'https:'],
52
51
  connectSrc: ["'self'"],
53
52
  fontSrc: ["'self'"],
54
53
  objectSrc: ["'none'"],
@@ -59,8 +58,8 @@ export const csp = (
59
58
  // Generate nonce if requested
60
59
  let nonce: string | undefined;
61
60
  if (options.nonce) {
62
- const crypto = require("crypto");
63
- nonce = crypto.randomBytes(16).toString("base64");
61
+ const crypto = require('crypto');
62
+ nonce = crypto.randomBytes(16).toString('base64');
64
63
  req.cspNonce = nonce;
65
64
  }
66
65
 
@@ -68,25 +67,20 @@ export const csp = (
68
67
  const cspParts: string[] = [];
69
68
 
70
69
  for (const [directive, sources] of Object.entries(directives)) {
71
- if (directive === "upgradeInsecureRequests" && sources === true) {
72
- cspParts.push("upgrade-insecure-requests");
73
- } else if (directive === "blockAllMixedContent" && sources === true) {
74
- cspParts.push("block-all-mixed-content");
70
+ if (directive === 'upgradeInsecureRequests' && sources === true) {
71
+ cspParts.push('upgrade-insecure-requests');
72
+ } else if (directive === 'blockAllMixedContent' && sources === true) {
73
+ cspParts.push('block-all-mixed-content');
75
74
  } else if (Array.isArray(sources)) {
76
- let sourceList = sources.join(" ");
75
+ let sourceList = sources.join(' ');
77
76
 
78
77
  // Add nonce to script-src and style-src if enabled
79
- if (
80
- nonce &&
81
- (directive === "scriptSrc" || directive === "styleSrc")
82
- ) {
78
+ if (nonce && (directive === 'scriptSrc' || directive === 'styleSrc')) {
83
79
  sourceList += ` 'nonce-${nonce}'`;
84
80
  }
85
81
 
86
82
  // Convert camelCase to kebab-case
87
- const kebabDirective = directive
88
- .replace(/([A-Z])/g, "-$1")
89
- .toLowerCase();
83
+ const kebabDirective = directive.replace(/([A-Z])/g, '-$1').toLowerCase();
90
84
  cspParts.push(`${kebabDirective} ${sourceList}`);
91
85
  }
92
86
  }
@@ -96,10 +90,10 @@ export const csp = (
96
90
  cspParts.push(`report-uri ${options.reportUri}`);
97
91
  }
98
92
 
99
- const cspValue = cspParts.join("; ");
93
+ const cspValue = cspParts.join('; ');
100
94
  const headerName = options.reportOnly
101
- ? "Content-Security-Policy-Report-Only"
102
- : "Content-Security-Policy";
95
+ ? 'Content-Security-Policy-Report-Only'
96
+ : 'Content-Security-Policy';
103
97
 
104
98
  res.setHeader(headerName, cspValue);
105
99
  });
@@ -1,8 +1,8 @@
1
1
  // CSRF Protection Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { createFrameworkLogger } from "../../logger";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
- const logger = createFrameworkLogger("CSRFMiddleware");
5
+ const logger = createFrameworkLogger('CSRFMiddleware');
6
6
 
7
7
  export const csrf = (
8
8
  options: {
@@ -12,37 +12,36 @@ export const csrf = (
12
12
  headerName?: string;
13
13
  ignoreMethods?: string[];
14
14
  sameSite?: boolean;
15
- } = {},
15
+ } = {}
16
16
  ): MiddlewareInterface => ({
17
- name: "csrf",
18
- version: "1.0.0",
17
+ name: 'csrf',
18
+ version: '1.0.0',
19
19
  metadata: {
20
- name: "csrf",
21
- version: "1.0.0",
22
- description:
23
- "CSRF protection middleware with token generation and validation",
24
- author: "MoroJS Team",
20
+ name: 'csrf',
21
+ version: '1.0.0',
22
+ description: 'CSRF protection middleware with token generation and validation',
23
+ author: 'MoroJS Team',
25
24
  },
26
25
 
27
26
  install: async (hooks: any, middlewareOptions: any = {}) => {
28
- logger.debug("Installing CSRF middleware", "Installation");
27
+ logger.debug('Installing CSRF middleware', 'Installation');
29
28
 
30
- const secret = options.secret || "moro-csrf-secret";
29
+ const secret = options.secret || 'moro-csrf-secret';
31
30
  const tokenLength = options.tokenLength || 32;
32
- const cookieName = options.cookieName || "_csrf";
33
- const headerName = options.headerName || "x-csrf-token";
34
- const ignoreMethods = options.ignoreMethods || ["GET", "HEAD", "OPTIONS"];
31
+ const cookieName = options.cookieName || '_csrf';
32
+ const headerName = options.headerName || 'x-csrf-token';
33
+ const ignoreMethods = options.ignoreMethods || ['GET', 'HEAD', 'OPTIONS'];
35
34
 
36
35
  const generateToken = () => {
37
- const crypto = require("crypto");
38
- return crypto.randomBytes(tokenLength).toString("hex");
36
+ const crypto = require('crypto');
37
+ return crypto.randomBytes(tokenLength).toString('hex');
39
38
  };
40
39
 
41
40
  const verifyToken = (token: string, sessionToken: string) => {
42
41
  return token && sessionToken && token === sessionToken;
43
42
  };
44
43
 
45
- hooks.before("request", async (context: HookContext) => {
44
+ hooks.before('request', async (context: HookContext) => {
46
45
  const req = context.request as any;
47
46
  const res = context.response as any;
48
47
 
@@ -53,10 +52,8 @@ export const csrf = (
53
52
  // Set token in cookie
54
53
  res.cookie(cookieName, req._csrfToken, {
55
54
  httpOnly: true,
56
- sameSite: options.sameSite !== false ? "strict" : undefined,
57
- secure:
58
- req.headers["x-forwarded-proto"] === "https" ||
59
- (req.socket as any).encrypted,
55
+ sameSite: options.sameSite !== false ? 'strict' : undefined,
56
+ secure: req.headers['x-forwarded-proto'] === 'https' || (req.socket as any).encrypted,
60
57
  });
61
58
  }
62
59
  return req._csrfToken;
@@ -69,17 +66,15 @@ export const csrf = (
69
66
 
70
67
  // Get token from header or body
71
68
  const token =
72
- req.headers[headerName] ||
73
- (req.body && req.body._csrf) ||
74
- (req.query && req.query._csrf);
69
+ req.headers[headerName] || (req.body && req.body._csrf) || (req.query && req.query._csrf);
75
70
 
76
71
  // Get session token from cookie
77
72
  const sessionToken = req.cookies?.[cookieName];
78
73
 
79
- if (!verifyToken(token as string, sessionToken || "")) {
80
- const error = new Error("Invalid CSRF token");
74
+ if (!verifyToken(token as string, sessionToken || '')) {
75
+ const error = new Error('Invalid CSRF token');
81
76
  (error as any).status = 403;
82
- (error as any).code = "CSRF_TOKEN_MISMATCH";
77
+ (error as any).code = 'CSRF_TOKEN_MISMATCH';
83
78
  throw error;
84
79
  }
85
80
  });
@@ -1,11 +1,11 @@
1
1
  // Error tracking middleware
2
- import { createFrameworkLogger } from "../../logger";
2
+ import { createFrameworkLogger } from '../../logger';
3
3
 
4
- const logger = createFrameworkLogger("ErrorTracker");
4
+ const logger = createFrameworkLogger('ErrorTracker');
5
5
 
6
6
  export const errorTracker = async (context: any): Promise<void> => {
7
7
  context.onError = (error: Error) => {
8
- logger.error("Request error", "ErrorTracking", {
8
+ logger.error('Request error', 'ErrorTracking', {
9
9
  error: error.message,
10
10
  stack: error.stack,
11
11
  url: context.request?.url,
@@ -1,38 +1,38 @@
1
1
  // Built-in Middleware Exports
2
- export { auth } from "./auth";
3
- export { rateLimit } from "./rate-limit";
4
- export { cors } from "./cors";
5
- export { validation } from "./validation";
6
- export { requestLogger } from "./request-logger";
7
- export { performanceMonitor } from "./performance-monitor";
8
- export { errorTracker } from "./error-tracker";
2
+ export { auth } from './auth';
3
+ export { rateLimit } from './rate-limit';
4
+ export { cors } from './cors';
5
+ export { validation } from './validation';
6
+ export { requestLogger } from './request-logger';
7
+ export { performanceMonitor } from './performance-monitor';
8
+ export { errorTracker } from './error-tracker';
9
9
 
10
10
  // Advanced Security & Performance Middleware
11
- export { cookie } from "./cookie";
12
- export { csrf } from "./csrf";
13
- export { csp } from "./csp";
14
- export { sse } from "./sse";
15
- export { session } from "./session";
11
+ export { cookie } from './cookie';
12
+ export { csrf } from './csrf';
13
+ export { csp } from './csp';
14
+ export { sse } from './sse';
15
+ export { session } from './session';
16
16
 
17
17
  // Clean Architecture Middleware
18
- export { cache } from "./cache";
19
- export { cdn } from "./cdn";
18
+ export { cache } from './cache';
19
+ export { cdn } from './cdn';
20
20
 
21
21
  // Import for collections
22
- import { auth } from "./auth";
23
- import { rateLimit } from "./rate-limit";
24
- import { cors } from "./cors";
25
- import { validation } from "./validation";
26
- import { requestLogger } from "./request-logger";
27
- import { performanceMonitor } from "./performance-monitor";
28
- import { errorTracker } from "./error-tracker";
29
- import { cookie } from "./cookie";
30
- import { csrf } from "./csrf";
31
- import { csp } from "./csp";
32
- import { sse } from "./sse";
33
- import { session } from "./session";
34
- import { cache } from "./cache";
35
- import { cdn } from "./cdn";
22
+ import { auth } from './auth';
23
+ import { rateLimit } from './rate-limit';
24
+ import { cors } from './cors';
25
+ import { validation } from './validation';
26
+ import { requestLogger } from './request-logger';
27
+ import { performanceMonitor } from './performance-monitor';
28
+ import { errorTracker } from './error-tracker';
29
+ import { cookie } from './cookie';
30
+ import { csrf } from './csrf';
31
+ import { csp } from './csp';
32
+ import { sse } from './sse';
33
+ import { session } from './session';
34
+ import { cache } from './cache';
35
+ import { cdn } from './cdn';
36
36
 
37
37
  export const builtInMiddleware = {
38
38
  auth,
@@ -1,7 +1,7 @@
1
1
  // Performance monitoring middleware
2
- import { createFrameworkLogger } from "../../logger";
2
+ import { createFrameworkLogger } from '../../logger';
3
3
 
4
- const logger = createFrameworkLogger("PerformanceMonitor");
4
+ const logger = createFrameworkLogger('PerformanceMonitor');
5
5
 
6
6
  export const performanceMonitor = async (context: any): Promise<void> => {
7
7
  const startTime = Date.now();
@@ -13,12 +13,12 @@ export const performanceMonitor = async (context: any): Promise<void> => {
13
13
  if (duration > 1000) {
14
14
  logger.warn(
15
15
  `Slow request detected: ${context.request?.path} took ${duration}ms`,
16
- "SlowRequest",
16
+ 'SlowRequest',
17
17
  {
18
18
  path: context.request?.path,
19
19
  method: context.request?.method,
20
20
  duration,
21
- },
21
+ }
22
22
  );
23
23
  }
24
24
  };
@@ -1,27 +1,27 @@
1
1
  // Rate Limiting Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { createFrameworkLogger } from "../../logger";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
- const logger = createFrameworkLogger("RateLimitMiddleware");
5
+ const logger = createFrameworkLogger('RateLimitMiddleware');
6
6
 
7
7
  export const rateLimit = (
8
8
  options: {
9
9
  windowMs?: number;
10
10
  max?: number;
11
11
  message?: string;
12
- } = {},
12
+ } = {}
13
13
  ): MiddlewareInterface => ({
14
- name: "rate-limit",
15
- version: "1.0.0",
14
+ name: 'rate-limit',
15
+ version: '1.0.0',
16
16
  metadata: {
17
- name: "rate-limit",
18
- version: "1.0.0",
19
- description: "Rate limiting middleware with configurable windows",
20
- author: "MoroJS Team",
17
+ name: 'rate-limit',
18
+ version: '1.0.0',
19
+ description: 'Rate limiting middleware with configurable windows',
20
+ author: 'MoroJS Team',
21
21
  },
22
22
 
23
23
  install: async (hooks: any, options: any = {}) => {
24
- logger.debug("Installing rate limit middleware", "Installation", {
24
+ logger.debug('Installing rate limit middleware', 'Installation', {
25
25
  options,
26
26
  });
27
27
 
@@ -29,9 +29,9 @@ export const rateLimit = (
29
29
  const max = options.max || 100; // 100 requests per window
30
30
  const clientCounts = new Map();
31
31
 
32
- hooks.before("request", async (context: HookContext) => {
32
+ hooks.before('request', async (context: HookContext) => {
33
33
  const req = context.request as any;
34
- const clientId = req.connection?.remoteAddress || "unknown";
34
+ const clientId = req.connection?.remoteAddress || 'unknown';
35
35
  const now = Date.now();
36
36
 
37
37
  if (!clientCounts.has(clientId)) {
@@ -48,12 +48,12 @@ export const rateLimit = (
48
48
  client.count++;
49
49
 
50
50
  if (client.count > max) {
51
- logger.warn(`Rate limit exceeded for ${clientId}`, "RateLimit", {
51
+ logger.warn(`Rate limit exceeded for ${clientId}`, 'RateLimit', {
52
52
  clientId,
53
53
  count: client.count,
54
54
  max,
55
55
  });
56
- throw new Error(options.message || "Too many requests");
56
+ throw new Error(options.message || 'Too many requests');
57
57
  }
58
58
  });
59
59
  },
@@ -2,9 +2,7 @@
2
2
  export const requestLogger = async (context: any): Promise<void> => {
3
3
  const startTime = Date.now();
4
4
 
5
- console.log(
6
- `[${new Date().toISOString()}] ${context.request?.method} ${context.request?.path}`,
7
- );
5
+ console.log(`[${new Date().toISOString()}] ${context.request?.method} ${context.request?.path}`);
8
6
 
9
7
  // Log completion after response
10
8
  context.onComplete = () => {