@morojs/moro 1.6.2 → 1.6.3

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 (366) hide show
  1. package/dist/core/http/http-server.js +12 -9
  2. package/dist/core/http/http-server.js.map +1 -1
  3. package/dist/core/http/uws-http-server.js +1 -1
  4. package/dist/core/http/uws-http-server.js.map +1 -1
  5. package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
  6. package/dist/core/middleware/built-in/auth/core.js +358 -0
  7. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  8. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
  9. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  10. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  11. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  12. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  13. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  14. package/dist/core/middleware/built-in/auth/index.js +15 -0
  15. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  16. package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
  17. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  18. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  19. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  20. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  21. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  22. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
  23. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  24. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  25. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
  26. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  27. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
  28. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  29. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  30. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
  31. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  32. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
  33. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
  34. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  35. package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
  36. package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
  37. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  38. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  39. package/dist/core/middleware/built-in/cache/core.js +87 -0
  40. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  41. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  42. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
  43. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  44. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  45. package/dist/core/middleware/built-in/cache/index.js +9 -0
  46. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  47. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  48. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  49. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  50. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  51. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
  52. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  53. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  54. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
  55. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  56. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
  57. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
  58. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  59. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
  60. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  61. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  62. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
  63. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  64. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  65. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  66. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  67. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  68. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  69. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  70. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  71. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  72. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  73. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  74. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  75. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  76. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  77. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  78. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  79. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  80. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  81. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  82. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  83. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  84. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  85. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  86. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  87. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  88. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  89. package/dist/core/middleware/built-in/cors/core.js +51 -0
  90. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  91. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  92. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  93. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  94. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  95. package/dist/core/middleware/built-in/cors/index.js +9 -0
  96. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  97. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  98. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  99. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  100. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  101. package/dist/core/middleware/built-in/csp/core.js +88 -0
  102. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  103. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  104. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  105. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  106. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  107. package/dist/core/middleware/built-in/csp/index.js +9 -0
  108. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  109. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  110. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  111. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  112. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  113. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  114. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  115. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  116. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  117. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  118. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  119. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  120. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  121. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  122. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  123. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  124. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  125. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  126. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  127. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  128. package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
  129. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  130. package/dist/core/middleware/built-in/index.d.ts +25 -59
  131. package/dist/core/middleware/built-in/index.js +31 -31
  132. package/dist/core/middleware/built-in/index.js.map +1 -1
  133. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  134. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  135. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  136. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  137. package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
  138. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  139. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  140. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  141. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  142. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  143. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
  144. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  145. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  146. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  147. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  148. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  149. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  150. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  151. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  152. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  153. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  154. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  155. package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
  156. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  157. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  158. package/dist/core/middleware/built-in/session/core.js +227 -0
  159. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  160. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  161. package/dist/core/middleware/built-in/session/hook.js +53 -0
  162. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  163. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  164. package/dist/core/middleware/built-in/session/index.js +9 -0
  165. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  166. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  167. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  168. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  169. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  170. package/dist/core/middleware/built-in/sse/core.js +117 -0
  171. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  172. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  173. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  174. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  175. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  176. package/dist/core/middleware/built-in/sse/index.js +9 -0
  177. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  178. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  179. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  180. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  181. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  182. package/dist/core/middleware/built-in/validation/core.js +93 -0
  183. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  184. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  185. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
  186. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  187. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  188. package/dist/core/middleware/built-in/validation/index.js +9 -0
  189. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  190. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  191. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  192. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  193. package/dist/core/middleware/index.js +6 -0
  194. package/dist/core/middleware/index.js.map +1 -1
  195. package/dist/core/routing/unified-router.d.ts +4 -20
  196. package/dist/core/routing/unified-router.js +61 -106
  197. package/dist/core/routing/unified-router.js.map +1 -1
  198. package/dist/index.d.ts +3 -2
  199. package/dist/index.js +3 -2
  200. package/dist/index.js.map +1 -1
  201. package/dist/moro.js +12 -18
  202. package/dist/moro.js.map +1 -1
  203. package/dist/types/hooks.d.ts +3 -0
  204. package/package.json +2 -6
  205. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  206. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  207. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  208. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  209. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  210. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  211. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  212. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  213. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  214. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  215. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  216. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  217. package/dist/core/middleware/built-in/auth.js +0 -348
  218. package/dist/core/middleware/built-in/auth.js.map +0 -1
  219. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  220. package/dist/core/middleware/built-in/cache.js.map +0 -1
  221. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  222. package/dist/core/middleware/built-in/cdn.js +0 -109
  223. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  224. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  225. package/dist/core/middleware/built-in/cookie.js +0 -64
  226. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  227. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  228. package/dist/core/middleware/built-in/cors.js +0 -25
  229. package/dist/core/middleware/built-in/cors.js.map +0 -1
  230. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  231. package/dist/core/middleware/built-in/csp.js +0 -68
  232. package/dist/core/middleware/built-in/csp.js.map +0 -1
  233. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  234. package/dist/core/middleware/built-in/csrf.js +0 -60
  235. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  236. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  237. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  238. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  239. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  240. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  241. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  242. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  243. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  244. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  245. package/dist/core/middleware/built-in/session.d.ts +0 -41
  246. package/dist/core/middleware/built-in/session.js +0 -205
  247. package/dist/core/middleware/built-in/session.js.map +0 -1
  248. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  249. package/dist/core/middleware/built-in/sse.js +0 -69
  250. package/dist/core/middleware/built-in/sse.js.map +0 -1
  251. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  252. package/dist/core/middleware/built-in/validation.js.map +0 -1
  253. package/jest.config.mjs +0 -41
  254. package/src/core/auth/README.md +0 -339
  255. package/src/core/auth/morojs-adapter.ts +0 -415
  256. package/src/core/config/config-manager.ts +0 -133
  257. package/src/core/config/config-sources.ts +0 -600
  258. package/src/core/config/config-validator.ts +0 -1116
  259. package/src/core/config/file-loader.ts +0 -150
  260. package/src/core/config/index.ts +0 -109
  261. package/src/core/config/schema.ts +0 -164
  262. package/src/core/config/utils.ts +0 -244
  263. package/src/core/database/README.md +0 -238
  264. package/src/core/database/adapters/drizzle.ts +0 -415
  265. package/src/core/database/adapters/index.ts +0 -42
  266. package/src/core/database/adapters/mongodb.ts +0 -317
  267. package/src/core/database/adapters/mysql.ts +0 -235
  268. package/src/core/database/adapters/postgresql.ts +0 -226
  269. package/src/core/database/adapters/redis.ts +0 -379
  270. package/src/core/database/adapters/sqlite.ts +0 -263
  271. package/src/core/database/index.ts +0 -3
  272. package/src/core/docs/index.ts +0 -231
  273. package/src/core/docs/openapi-generator.ts +0 -576
  274. package/src/core/docs/schema-to-openapi.ts +0 -145
  275. package/src/core/docs/simple-docs.ts +0 -295
  276. package/src/core/docs/swagger-ui.ts +0 -354
  277. package/src/core/docs/zod-to-openapi.ts +0 -532
  278. package/src/core/events/event-bus.ts +0 -231
  279. package/src/core/events/index.ts +0 -12
  280. package/src/core/framework.ts +0 -885
  281. package/src/core/http/http-server.ts +0 -1847
  282. package/src/core/http/index.ts +0 -7
  283. package/src/core/http/uws-http-server.ts +0 -591
  284. package/src/core/logger/filters.ts +0 -153
  285. package/src/core/logger/index.ts +0 -21
  286. package/src/core/logger/logger.ts +0 -1033
  287. package/src/core/logger/outputs.ts +0 -132
  288. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  289. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  290. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  291. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
  292. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  293. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  294. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
  295. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  296. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  297. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  298. package/src/core/middleware/built-in/auth.ts +0 -410
  299. package/src/core/middleware/built-in/cache.ts +0 -213
  300. package/src/core/middleware/built-in/cdn.ts +0 -124
  301. package/src/core/middleware/built-in/cookie.ts +0 -85
  302. package/src/core/middleware/built-in/cors.ts +0 -38
  303. package/src/core/middleware/built-in/csp.ts +0 -101
  304. package/src/core/middleware/built-in/csrf.ts +0 -82
  305. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  306. package/src/core/middleware/built-in/index.ts +0 -87
  307. package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
  308. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  309. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  310. package/src/core/middleware/built-in/request-logger.ts +0 -16
  311. package/src/core/middleware/built-in/session.ts +0 -287
  312. package/src/core/middleware/built-in/sse.ts +0 -88
  313. package/src/core/middleware/built-in/validation.ts +0 -33
  314. package/src/core/middleware/index.ts +0 -177
  315. package/src/core/modules/auto-discovery.ts +0 -726
  316. package/src/core/modules/index.ts +0 -3
  317. package/src/core/modules/modules.ts +0 -135
  318. package/src/core/networking/adapters/index.ts +0 -17
  319. package/src/core/networking/adapters/socketio-adapter.ts +0 -254
  320. package/src/core/networking/adapters/uws-adapter.ts +0 -619
  321. package/src/core/networking/adapters/ws-adapter.ts +0 -429
  322. package/src/core/networking/index.ts +0 -4
  323. package/src/core/networking/service-discovery.ts +0 -303
  324. package/src/core/networking/websocket-adapter.ts +0 -217
  325. package/src/core/networking/websocket-manager.ts +0 -308
  326. package/src/core/pooling/object-pool-manager.ts +0 -630
  327. package/src/core/routing/app-integration.ts +0 -164
  328. package/src/core/routing/index.ts +0 -261
  329. package/src/core/routing/path-matcher.ts +0 -222
  330. package/src/core/routing/router.ts +0 -97
  331. package/src/core/routing/unified-router.ts +0 -870
  332. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  333. package/src/core/runtime/base-adapter.ts +0 -130
  334. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  335. package/src/core/runtime/index.ts +0 -62
  336. package/src/core/runtime/node-adapter.ts +0 -202
  337. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  338. package/src/core/utilities/circuit-breaker.ts +0 -46
  339. package/src/core/utilities/container.ts +0 -736
  340. package/src/core/utilities/hooks.ts +0 -142
  341. package/src/core/utilities/index.ts +0 -17
  342. package/src/core/utilities/package-utils.ts +0 -59
  343. package/src/core/validation/adapters.ts +0 -147
  344. package/src/core/validation/index.ts +0 -258
  345. package/src/core/validation/schema-interface.ts +0 -100
  346. package/src/index.ts +0 -233
  347. package/src/moro.ts +0 -1728
  348. package/src/types/auth.ts +0 -440
  349. package/src/types/cache.ts +0 -38
  350. package/src/types/cdn.ts +0 -22
  351. package/src/types/config.ts +0 -229
  352. package/src/types/core.ts +0 -58
  353. package/src/types/database.ts +0 -32
  354. package/src/types/discovery.ts +0 -7
  355. package/src/types/events.ts +0 -82
  356. package/src/types/hooks.ts +0 -47
  357. package/src/types/http.ts +0 -89
  358. package/src/types/logger.ts +0 -102
  359. package/src/types/module.ts +0 -99
  360. package/src/types/runtime.ts +0 -76
  361. package/src/types/session.ts +0 -89
  362. package/tsconfig.json +0 -23
  363. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
  364. /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
  365. /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
  366. /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
@@ -1,132 +0,0 @@
1
- // Advanced Logger Outputs
2
- import { writeFile, appendFile, mkdir } from 'fs/promises';
3
- import { join, dirname } from 'path';
4
- import { LogEntry, LogOutput } from '../../types/logger.js';
5
-
6
- // File output for persistent logging
7
- export class FileOutput implements LogOutput {
8
- name = 'file';
9
-
10
- constructor(
11
- private filePath: string,
12
- private options: {
13
- format?: 'json' | 'pretty';
14
- maxSize?: number; // MB
15
- rotate?: boolean;
16
- } = {}
17
- ) {}
18
-
19
- async write(entry: LogEntry): Promise<void> {
20
- try {
21
- // Ensure directory exists
22
- await mkdir(dirname(this.filePath), { recursive: true });
23
-
24
- const format = this.options.format || 'json';
25
- const line =
26
- format === 'json' ? JSON.stringify(entry) + '\n' : this.formatPretty(entry) + '\n';
27
-
28
- await appendFile(this.filePath, line, 'utf8');
29
-
30
- // TODO: Implement log rotation if needed
31
- } catch (error) {
32
- console.error('File logger error:', error);
33
- }
34
- }
35
-
36
- private formatPretty(entry: LogEntry): string {
37
- const timestamp = entry.timestamp.toISOString();
38
- const level = entry.level.toUpperCase().padEnd(5);
39
- const context = entry.context ? `[${entry.context}] ` : '';
40
- const metadata =
41
- entry.metadata && Object.keys(entry.metadata).length > 0
42
- ? ` ${JSON.stringify(entry.metadata)}`
43
- : '';
44
-
45
- return `${timestamp} ${level} ${context}${entry.message}${metadata}`;
46
- }
47
- }
48
-
49
- // HTTP webhook output for external logging services
50
- export class WebhookOutput implements LogOutput {
51
- name = 'webhook';
52
-
53
- constructor(
54
- private url: string,
55
- private options: {
56
- headers?: Record<string, string>;
57
- batch?: boolean;
58
- batchSize?: number;
59
- timeout?: number;
60
- } = {}
61
- ) {}
62
-
63
- async write(entry: LogEntry): Promise<void> {
64
- try {
65
- const response = await fetch(this.url, {
66
- method: 'POST',
67
- headers: {
68
- 'Content-Type': 'application/json',
69
- ...this.options.headers,
70
- },
71
- body: JSON.stringify(entry),
72
- signal: AbortSignal.timeout(this.options.timeout || 5000),
73
- });
74
-
75
- if (!response.ok) {
76
- throw new Error(`Webhook failed: ${response.status}`);
77
- }
78
- } catch (error) {
79
- console.error('Webhook logger error:', error);
80
- }
81
- }
82
- }
83
-
84
- // Memory buffer output for testing and debugging
85
- export class MemoryOutput implements LogOutput {
86
- name = 'memory';
87
- private buffer: LogEntry[] = [];
88
-
89
- constructor(private maxSize: number = 1000) {}
90
-
91
- write(entry: LogEntry): void {
92
- this.buffer.push(entry);
93
- if (this.buffer.length > this.maxSize) {
94
- this.buffer.shift();
95
- }
96
- }
97
-
98
- getEntries(): LogEntry[] {
99
- return [...this.buffer];
100
- }
101
-
102
- clear(): void {
103
- this.buffer = [];
104
- }
105
- }
106
-
107
- // Stream output for custom processing
108
- export class StreamOutput implements LogOutput {
109
- name = 'stream';
110
- format?: 'pretty' | 'json' | 'compact';
111
-
112
- constructor(
113
- private stream: NodeJS.WritableStream,
114
- format: 'json' | 'pretty' = 'json'
115
- ) {
116
- this.format = format;
117
- }
118
-
119
- write(entry: LogEntry): void {
120
- const data =
121
- this.format === 'json' ? JSON.stringify(entry) + '\n' : this.formatPretty(entry) + '\n';
122
-
123
- this.stream.write(data);
124
- }
125
-
126
- private formatPretty(entry: LogEntry): string {
127
- const timestamp = entry.timestamp.toISOString();
128
- const level = entry.level.toUpperCase().padEnd(5);
129
- const context = entry.context ? `[${entry.context}] ` : '';
130
- return `${timestamp} ${level} ${context}${entry.message}`;
131
- }
132
- }
@@ -1,104 +0,0 @@
1
- // File System Cache Adapter
2
- import { CacheAdapter } from '../../../../../types/cache.js';
3
- import { createFrameworkLogger } from '../../../../logger/index.js';
4
- import crypto from 'crypto';
5
-
6
- const logger = createFrameworkLogger('FileCacheAdapter');
7
-
8
- export class FileCacheAdapter implements CacheAdapter {
9
- private cacheDir: string;
10
-
11
- constructor(options: { cacheDir?: string } = {}) {
12
- this.cacheDir = options.cacheDir || './cache';
13
- this.ensureCacheDir();
14
- }
15
-
16
- private async ensureCacheDir(): Promise<void> {
17
- const fs = await import('fs/promises');
18
- try {
19
- await fs.mkdir(this.cacheDir, { recursive: true });
20
- } catch (error) {
21
- logger.error('Failed to create cache directory', 'FileCache', { error });
22
- }
23
- }
24
-
25
- private getFilePath(key: string): string {
26
- const hash = crypto.createHash('md5').update(key).digest('hex');
27
- return `${this.cacheDir}/${hash}.json`;
28
- }
29
-
30
- async get(key: string): Promise<any> {
31
- try {
32
- const fs = await import('fs/promises');
33
- const filePath = this.getFilePath(key);
34
- const data = await fs.readFile(filePath, 'utf-8');
35
- const parsed = JSON.parse(data);
36
-
37
- if (Date.now() > parsed.expires) {
38
- await this.del(key);
39
- return null;
40
- }
41
-
42
- return parsed.value;
43
- } catch (error) {
44
- return null;
45
- }
46
- }
47
-
48
- async set(key: string, value: any, ttl: number = 3600): Promise<void> {
49
- try {
50
- const fs = await import('fs/promises');
51
- const filePath = this.getFilePath(key);
52
- const expires = Date.now() + ttl * 1000;
53
- const data = JSON.stringify({ value, expires });
54
-
55
- await fs.writeFile(filePath, data);
56
- logger.debug(`Cached item to file: ${key} (TTL: ${ttl}s)`, 'FileCache');
57
- } catch (error) {
58
- logger.error('File cache set error', 'FileCache', { key, error });
59
- }
60
- }
61
-
62
- async del(key: string): Promise<void> {
63
- try {
64
- const fs = await import('fs/promises');
65
- const filePath = this.getFilePath(key);
66
- await fs.unlink(filePath);
67
- logger.debug(`Deleted file cache item: ${key}`, 'FileCache');
68
- } catch (error) {
69
- // File might not exist, which is okay
70
- }
71
- }
72
-
73
- async clear(): Promise<void> {
74
- try {
75
- const fs = await import('fs/promises');
76
- const files = await fs.readdir(this.cacheDir);
77
-
78
- await Promise.all(files.map(file => fs.unlink(`${this.cacheDir}/${file}`)));
79
-
80
- logger.debug('Cleared all file cache items', 'FileCache');
81
- } catch (error) {
82
- logger.error('File cache clear error', 'FileCache', { error });
83
- }
84
- }
85
-
86
- async exists(key: string): Promise<boolean> {
87
- const value = await this.get(key);
88
- return value !== null;
89
- }
90
-
91
- async ttl(key: string): Promise<number> {
92
- try {
93
- const fs = await import('fs/promises');
94
- const filePath = this.getFilePath(key);
95
- const data = await fs.readFile(filePath, 'utf-8');
96
- const parsed = JSON.parse(data);
97
-
98
- const remaining = Math.floor((parsed.expires - Date.now()) / 1000);
99
- return remaining > 0 ? remaining : -1;
100
- } catch (error) {
101
- return -1;
102
- }
103
- }
104
- }
@@ -1,23 +0,0 @@
1
- // Cache Adapters
2
- export { MemoryCacheAdapter } from './memory.js';
3
- export { RedisCacheAdapter } from './redis.js';
4
- export { FileCacheAdapter } from './file.js';
5
-
6
- import { MemoryCacheAdapter } from './memory.js';
7
- import { RedisCacheAdapter } from './redis.js';
8
- import { FileCacheAdapter } from './file.js';
9
- import { CacheAdapter } from '../../../../../types/cache.js';
10
-
11
- // Adapter factory function for auto-loading
12
- export function createCacheAdapter(type: string, options: any = {}): CacheAdapter {
13
- switch (type.toLowerCase()) {
14
- case 'memory':
15
- return new MemoryCacheAdapter();
16
- case 'redis':
17
- return new RedisCacheAdapter(options);
18
- case 'file':
19
- return new FileCacheAdapter(options);
20
- default:
21
- throw new Error(`Unknown cache adapter type: ${type}`);
22
- }
23
- }
@@ -1,73 +0,0 @@
1
- // Memory Cache Adapter
2
- import { CacheAdapter } from '../../../../../types/cache.js';
3
- import { createFrameworkLogger } from '../../../../logger/index.js';
4
-
5
- const logger = createFrameworkLogger('MemoryCacheAdapter');
6
-
7
- export class MemoryCacheAdapter implements CacheAdapter {
8
- private cache = new Map<string, { value: any; expires: number }>();
9
- private timers = new Map<string, NodeJS.Timeout>();
10
-
11
- async get(key: string): Promise<any> {
12
- const item = this.cache.get(key);
13
- if (!item) return null;
14
-
15
- if (Date.now() > item.expires) {
16
- await this.del(key);
17
- return null;
18
- }
19
-
20
- return item.value;
21
- }
22
-
23
- async set(key: string, value: any, ttl: number = 3600): Promise<void> {
24
- const expires = Date.now() + ttl * 1000;
25
-
26
- // Clear existing timer
27
- const existingTimer = this.timers.get(key);
28
- if (existingTimer) {
29
- clearTimeout(existingTimer);
30
- }
31
-
32
- // Set new value
33
- this.cache.set(key, { value, expires });
34
-
35
- // Set expiration timer
36
- const timer = setTimeout(() => {
37
- this.cache.delete(key);
38
- this.timers.delete(key);
39
- }, ttl * 1000);
40
-
41
- this.timers.set(key, timer);
42
- logger.debug(`Cached item: ${key} (TTL: ${ttl}s)`, 'MemoryCache');
43
- }
44
-
45
- async del(key: string): Promise<void> {
46
- this.cache.delete(key);
47
- const timer = this.timers.get(key);
48
- if (timer) {
49
- clearTimeout(timer);
50
- this.timers.delete(key);
51
- }
52
- logger.debug(`Deleted cache item: ${key}`, 'MemoryCache');
53
- }
54
-
55
- async clear(): Promise<void> {
56
- this.cache.clear();
57
- this.timers.forEach(timer => clearTimeout(timer));
58
- this.timers.clear();
59
- logger.debug('Cleared all cache items', 'MemoryCache');
60
- }
61
-
62
- async exists(key: string): Promise<boolean> {
63
- return this.cache.has(key) && Date.now() <= this.cache.get(key)!.expires;
64
- }
65
-
66
- async ttl(key: string): Promise<number> {
67
- const item = this.cache.get(key);
68
- if (!item) return -1;
69
-
70
- const remaining = Math.floor((item.expires - Date.now()) / 1000);
71
- return remaining > 0 ? remaining : -1;
72
- }
73
- }
@@ -1,114 +0,0 @@
1
- // Redis Cache Adapter
2
- import { CacheAdapter } from '../../../../../types/cache.js';
3
- import { createFrameworkLogger } from '../../../../logger/index.js';
4
- import { resolveUserPackage } from '../../../../utilities/package-utils.js';
5
-
6
- const logger = createFrameworkLogger('RedisCacheAdapter');
7
-
8
- export class RedisCacheAdapter implements CacheAdapter {
9
- private client: any;
10
-
11
- constructor(
12
- options: {
13
- host?: string;
14
- port?: number;
15
- password?: string;
16
- db?: number;
17
- keyPrefix?: string;
18
- } = {}
19
- ) {
20
- this.initPromise = this.initialize(options);
21
- }
22
-
23
- private initPromise: Promise<void>;
24
-
25
- private async initialize(options: {
26
- host?: string;
27
- port?: number;
28
- password?: string;
29
- db?: number;
30
- keyPrefix?: string;
31
- }): Promise<void> {
32
- try {
33
- const redisPath = resolveUserPackage('redis');
34
- const redis = await import(redisPath);
35
- this.client = redis.default.createClient({
36
- host: options.host || 'localhost',
37
- port: options.port || 6379,
38
- password: options.password,
39
- db: options.db || 0,
40
- key_prefix: options.keyPrefix || 'moro:cache:',
41
- });
42
-
43
- this.client.on('error', (err: Error) => {
44
- logger.error('Redis cache error', 'RedisCache', { error: err.message });
45
- });
46
-
47
- logger.info('Redis cache adapter initialized', 'RedisCache');
48
- } catch (error) {
49
- logger.error('Redis not available, falling back to memory cache', 'RedisCache');
50
- throw new Error('Redis package not installed. Run: npm install redis');
51
- }
52
- }
53
-
54
- async get(key: string): Promise<any> {
55
- try {
56
- const value = await this.client.get(key);
57
- return value ? JSON.parse(value) : null;
58
- } catch (error) {
59
- logger.error('Redis get error', 'RedisCache', { key, error });
60
- return null;
61
- }
62
- }
63
-
64
- async set(key: string, value: any, ttl: number = 3600): Promise<void> {
65
- try {
66
- const serialized = JSON.stringify(value);
67
- if (ttl > 0) {
68
- await this.client.setex(key, ttl, serialized);
69
- } else {
70
- await this.client.set(key, serialized);
71
- }
72
- logger.debug(`Cached item in Redis: ${key} (TTL: ${ttl}s)`, 'RedisCache');
73
- } catch (error) {
74
- logger.error('Redis set error', 'RedisCache', { key, error });
75
- }
76
- }
77
-
78
- async del(key: string): Promise<void> {
79
- try {
80
- await this.client.del(key);
81
- logger.debug(`Deleted Redis cache item: ${key}`, 'RedisCache');
82
- } catch (error) {
83
- logger.error('Redis del error', 'RedisCache', { key, error });
84
- }
85
- }
86
-
87
- async clear(): Promise<void> {
88
- try {
89
- await this.client.flushdb();
90
- logger.debug('Cleared all Redis cache items', 'RedisCache');
91
- } catch (error) {
92
- logger.error('Redis clear error', 'RedisCache', { error });
93
- }
94
- }
95
-
96
- async exists(key: string): Promise<boolean> {
97
- try {
98
- const exists = await this.client.exists(key);
99
- return exists === 1;
100
- } catch (error) {
101
- logger.error('Redis exists error', 'RedisCache', { key, error });
102
- return false;
103
- }
104
- }
105
-
106
- async ttl(key: string): Promise<number> {
107
- try {
108
- return await this.client.ttl(key);
109
- } catch (error) {
110
- logger.error('Redis TTL error', 'RedisCache', { key, error });
111
- return -1;
112
- }
113
- }
114
- }
@@ -1,60 +0,0 @@
1
- // Azure CDN Adapter
2
- import { CDNAdapter } from '../../../../../types/cdn.js';
3
- import { createFrameworkLogger } from '../../../../logger/index.js';
4
-
5
- const logger = createFrameworkLogger('AzureCDNAdapter');
6
-
7
- export class AzureCDNAdapter implements CDNAdapter {
8
- private endpoint: string;
9
- private subscriptionId: string;
10
- private resourceGroup: string;
11
- private profileName: string;
12
- private endpointName: string;
13
-
14
- constructor(options: {
15
- subscriptionId: string;
16
- resourceGroup: string;
17
- profileName: string;
18
- endpointName: string;
19
- endpoint: string;
20
- clientId?: string;
21
- clientSecret?: string;
22
- tenantId?: string;
23
- }) {
24
- this.subscriptionId = options.subscriptionId;
25
- this.resourceGroup = options.resourceGroup;
26
- this.profileName = options.profileName;
27
- this.endpointName = options.endpointName;
28
- this.endpoint = options.endpoint;
29
-
30
- logger.info('Azure CDN adapter initialized', 'AzureCDN');
31
- }
32
-
33
- async purge(urls: string[]): Promise<void> {
34
- try {
35
- const purgeUrl = `https://management.azure.com/subscriptions/${this.subscriptionId}/resourceGroups/${this.resourceGroup}/providers/Microsoft.Cdn/profiles/${this.profileName}/endpoints/${this.endpointName}/purge`;
36
-
37
- const purgeData = {
38
- contentPaths: urls.map(url => (url.startsWith('/') ? url : `/${url}`)),
39
- };
40
-
41
- logger.info(`Azure CDN cache purge requested: ${urls.length} URLs`, 'AzureCDN');
42
-
43
- // Implementation would use Azure SDK or REST API calls
44
- // const response = await fetch(purgeUrl, { method: 'POST', body: JSON.stringify(purgeData) });
45
- } catch (error) {
46
- logger.error('Azure CDN purge failed', 'AzureCDN', { error, urls });
47
- throw error;
48
- }
49
- }
50
-
51
- async prefetch(urls: string[]): Promise<void> {
52
- logger.debug(`Azure CDN prefetch requested for ${urls.length} URLs`, 'AzureCDN');
53
- // Azure CDN prefetch implementation
54
- }
55
-
56
- setHeaders(response: any): void {
57
- response.setHeader('Cache-Control', 'public, max-age=3600');
58
- response.setHeader('Azure-CDN-Edge-Location', 'US-East');
59
- }
60
- }
@@ -1,83 +0,0 @@
1
- // Cloudflare CDN Adapter
2
- import { CDNAdapter } from '../../../../../types/cdn.js';
3
- import { createFrameworkLogger } from '../../../../logger/index.js';
4
-
5
- const logger = createFrameworkLogger('CloudflareCDNAdapter');
6
-
7
- export class CloudflareCDNAdapter implements CDNAdapter {
8
- private apiToken: string;
9
- private zoneId: string;
10
-
11
- constructor(options: { apiToken: string; zoneId: string }) {
12
- this.apiToken = options.apiToken;
13
- this.zoneId = options.zoneId;
14
-
15
- logger.info('Cloudflare CDN adapter initialized', 'Cloudflare');
16
- }
17
-
18
- async purge(urls: string[]): Promise<void> {
19
- try {
20
- const response = await this.cfRequest('POST', `/zones/${this.zoneId}/purge_cache`, {
21
- files: urls,
22
- });
23
-
24
- if (response.success) {
25
- logger.info(`Cloudflare cache purged: ${urls.length} URLs`, 'Cloudflare');
26
- } else {
27
- throw new Error('Cloudflare purge failed');
28
- }
29
- } catch (error) {
30
- logger.error('Cloudflare purge failed', 'Cloudflare', { error, urls });
31
- throw error;
32
- }
33
- }
34
-
35
- async prefetch(urls: string[]): Promise<void> {
36
- try {
37
- logger.debug(`Cloudflare prefetch requested for ${urls.length} URLs`, 'Cloudflare');
38
- // Cloudflare doesn't have direct prefetch, but we can use preload links
39
- for (const url of urls) {
40
- // Implementation would depend on Cloudflare Workers or edge functions
41
- }
42
- } catch (error) {
43
- logger.error('Cloudflare prefetch failed', 'Cloudflare', { error, urls });
44
- }
45
- }
46
-
47
- async getStats(): Promise<any> {
48
- try {
49
- const response = await this.cfRequest('GET', `/zones/${this.zoneId}/analytics/dashboard`);
50
- return response.result;
51
- } catch (error) {
52
- logger.error('Cloudflare stats failed', 'Cloudflare', { error });
53
- return null;
54
- }
55
- }
56
-
57
- setHeaders(response: any): void {
58
- response.setHeader('Cache-Control', 'public, max-age=3600');
59
- response.setHeader('CF-Cache-Status', 'DYNAMIC');
60
- response.setHeader('CF-Ray', `${Math.random().toString(36)}-DFW`);
61
- }
62
-
63
- private async cfRequest(method: string, endpoint: string, data?: any): Promise<any> {
64
- const url = `https://api.cloudflare.com/client/v4${endpoint}`;
65
-
66
- try {
67
- // In a real implementation, you'd use fetch or axios
68
- const response = {
69
- success: true,
70
- result: data || {},
71
- };
72
-
73
- return response;
74
- } catch (error) {
75
- logger.error('Cloudflare API request failed', 'Cloudflare', {
76
- error,
77
- method,
78
- endpoint,
79
- });
80
- throw error;
81
- }
82
- }
83
- }
@@ -1,94 +0,0 @@
1
- // AWS CloudFront CDN Adapter
2
- import { CDNAdapter } from '../../../../../types/cdn.js';
3
- import { createFrameworkLogger } from '../../../../logger/index.js';
4
- import { resolveUserPackage } from '../../../../utilities/package-utils.js';
5
-
6
- const logger = createFrameworkLogger('CloudFrontCDNAdapter');
7
-
8
- export class CloudFrontCDNAdapter implements CDNAdapter {
9
- private cloudfront: any;
10
- private distributionId: string;
11
-
12
- constructor(options: {
13
- accessKeyId: string;
14
- secretAccessKey: string;
15
- region: string;
16
- distributionId: string;
17
- }) {
18
- this.distributionId = options.distributionId;
19
- this.initPromise = this.initialize(options);
20
- }
21
-
22
- private initPromise: Promise<void>;
23
-
24
- private async initialize(options: {
25
- accessKeyId: string;
26
- secretAccessKey: string;
27
- region: string;
28
- }): Promise<void> {
29
- try {
30
- const awsPath = resolveUserPackage('aws-sdk');
31
- const AWS = await import(awsPath);
32
- AWS.default.config.update({
33
- accessKeyId: options.accessKeyId,
34
- secretAccessKey: options.secretAccessKey,
35
- region: options.region,
36
- });
37
-
38
- this.cloudfront = new AWS.default.CloudFront();
39
- logger.info('CloudFront CDN adapter initialized', 'CloudFront');
40
- } catch (error) {
41
- logger.error('AWS SDK not available', 'CloudFront');
42
- throw new Error('AWS SDK not installed. Run: npm install aws-sdk');
43
- }
44
- }
45
-
46
- async purge(urls: string[]): Promise<void> {
47
- try {
48
- const params = {
49
- DistributionId: this.distributionId,
50
- InvalidationBatch: {
51
- CallerReference: `moro-${Date.now()}`,
52
- Paths: {
53
- Quantity: urls.length,
54
- Items: urls.map(url => (url.startsWith('/') ? url : `/${url}`)),
55
- },
56
- },
57
- };
58
-
59
- const result = await this.cloudfront.createInvalidation(params).promise();
60
- logger.info(`CloudFront cache purged: ${urls.length} URLs`, 'CloudFront', {
61
- invalidationId: result.Invalidation.Id,
62
- });
63
- } catch (error) {
64
- logger.error('CloudFront purge failed', 'CloudFront', { error, urls });
65
- throw error;
66
- }
67
- }
68
-
69
- async prefetch(urls: string[]): Promise<void> {
70
- logger.debug(`CloudFront prefetch requested for ${urls.length} URLs`, 'CloudFront');
71
- // CloudFront doesn't have direct prefetch, but we can simulate with requests
72
- }
73
-
74
- async getStats(): Promise<any> {
75
- try {
76
- const params = { Id: this.distributionId };
77
- const distribution = await this.cloudfront.getDistribution(params).promise();
78
-
79
- return {
80
- status: distribution.Distribution.Status,
81
- domainName: distribution.Distribution.DomainName,
82
- enabled: distribution.Distribution.DistributionConfig.Enabled,
83
- };
84
- } catch (error) {
85
- logger.error('CloudFront stats failed', 'CloudFront', { error });
86
- return null;
87
- }
88
- }
89
-
90
- setHeaders(response: any): void {
91
- response.setHeader('Cache-Control', 'public, max-age=3600');
92
- response.setHeader('CloudFront-Viewer-Country', 'US');
93
- }
94
- }