@morojs/moro 1.6.8 → 1.7.0

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 (300) hide show
  1. package/README.md +3 -1
  2. package/dist/core/auth/morojs-adapter.js +16 -6
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-sources.js +27 -15
  5. package/dist/core/config/config-sources.js.map +1 -1
  6. package/dist/core/config/config-validator.js +201 -6
  7. package/dist/core/config/config-validator.js.map +1 -1
  8. package/dist/core/docs/openapi-generator.js +8 -9
  9. package/dist/core/docs/openapi-generator.js.map +1 -1
  10. package/dist/core/events/event-bus.js +1 -1
  11. package/dist/core/events/event-bus.js.map +1 -1
  12. package/dist/core/framework.d.ts +4 -2
  13. package/dist/core/framework.js +25 -24
  14. package/dist/core/framework.js.map +1 -1
  15. package/dist/core/graphql/core.js +34 -8
  16. package/dist/core/graphql/core.js.map +1 -1
  17. package/dist/core/grpc/adapters/grpc-js-adapter.d.ts +28 -0
  18. package/dist/core/grpc/adapters/grpc-js-adapter.js +449 -0
  19. package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -0
  20. package/dist/core/grpc/adapters/index.d.ts +1 -0
  21. package/dist/core/grpc/adapters/index.js +6 -0
  22. package/dist/core/grpc/adapters/index.js.map +1 -0
  23. package/dist/core/grpc/grpc-adapter.d.ts +47 -0
  24. package/dist/core/grpc/grpc-adapter.js +4 -0
  25. package/dist/core/grpc/grpc-adapter.js.map +1 -0
  26. package/dist/core/grpc/grpc-manager.d.ts +59 -0
  27. package/dist/core/grpc/grpc-manager.js +218 -0
  28. package/dist/core/grpc/grpc-manager.js.map +1 -0
  29. package/dist/core/grpc/index.d.ts +7 -0
  30. package/dist/core/grpc/index.js +10 -0
  31. package/dist/core/grpc/index.js.map +1 -0
  32. package/dist/core/grpc/middleware/auth.d.ts +22 -0
  33. package/dist/core/grpc/middleware/auth.js +126 -0
  34. package/dist/core/grpc/middleware/auth.js.map +1 -0
  35. package/dist/core/grpc/middleware/logging.d.ts +19 -0
  36. package/dist/core/grpc/middleware/logging.js +57 -0
  37. package/dist/core/grpc/middleware/logging.js.map +1 -0
  38. package/dist/core/grpc/middleware/validation.d.ts +18 -0
  39. package/dist/core/grpc/middleware/validation.js +126 -0
  40. package/dist/core/grpc/middleware/validation.js.map +1 -0
  41. package/dist/core/grpc/types.d.ts +233 -0
  42. package/dist/core/grpc/types.js +36 -0
  43. package/dist/core/grpc/types.js.map +1 -0
  44. package/dist/core/http/http-server.d.ts +13 -84
  45. package/dist/core/http/http-server.js +205 -792
  46. package/dist/core/http/http-server.js.map +1 -1
  47. package/dist/core/http/http2-server.d.ts +131 -0
  48. package/dist/core/http/http2-server.js +803 -0
  49. package/dist/core/http/http2-server.js.map +1 -0
  50. package/dist/core/http/index.d.ts +3 -1
  51. package/dist/core/http/index.js +2 -1
  52. package/dist/core/http/index.js.map +1 -1
  53. package/dist/core/http/uws-http-server.js +21 -26
  54. package/dist/core/http/uws-http-server.js.map +1 -1
  55. package/dist/core/jobs/job-executor.js +6 -1
  56. package/dist/core/jobs/job-executor.js.map +1 -1
  57. package/dist/core/jobs/job-scheduler.js +4 -1
  58. package/dist/core/jobs/job-scheduler.js.map +1 -1
  59. package/dist/core/jobs/leader-election.js +2 -1
  60. package/dist/core/jobs/leader-election.js.map +1 -1
  61. package/dist/core/logger/logger.js +41 -18
  62. package/dist/core/logger/logger.js.map +1 -1
  63. package/dist/core/logger/outputs.js +9 -3
  64. package/dist/core/logger/outputs.js.map +1 -1
  65. package/dist/core/mail/adapters/console-adapter.d.ts +14 -0
  66. package/dist/core/mail/adapters/console-adapter.js +89 -0
  67. package/dist/core/mail/adapters/console-adapter.js.map +1 -0
  68. package/dist/core/mail/adapters/index.d.ts +5 -0
  69. package/dist/core/mail/adapters/index.js +8 -0
  70. package/dist/core/mail/adapters/index.js.map +1 -0
  71. package/dist/core/mail/adapters/nodemailer-adapter.d.ts +18 -0
  72. package/dist/core/mail/adapters/nodemailer-adapter.js +188 -0
  73. package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -0
  74. package/dist/core/mail/adapters/resend-adapter.d.ts +18 -0
  75. package/dist/core/mail/adapters/resend-adapter.js +169 -0
  76. package/dist/core/mail/adapters/resend-adapter.js.map +1 -0
  77. package/dist/core/mail/adapters/sendgrid-adapter.d.ts +19 -0
  78. package/dist/core/mail/adapters/sendgrid-adapter.js +186 -0
  79. package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -0
  80. package/dist/core/mail/adapters/ses-adapter.d.ts +18 -0
  81. package/dist/core/mail/adapters/ses-adapter.js +167 -0
  82. package/dist/core/mail/adapters/ses-adapter.js.map +1 -0
  83. package/dist/core/mail/index.d.ts +5 -0
  84. package/dist/core/mail/index.js +8 -0
  85. package/dist/core/mail/index.js.map +1 -0
  86. package/dist/core/mail/mail-adapter.d.ts +62 -0
  87. package/dist/core/mail/mail-adapter.js +83 -0
  88. package/dist/core/mail/mail-adapter.js.map +1 -0
  89. package/dist/core/mail/mail-manager.d.ts +63 -0
  90. package/dist/core/mail/mail-manager.js +302 -0
  91. package/dist/core/mail/mail-manager.js.map +1 -0
  92. package/dist/core/mail/template-engine.d.ts +43 -0
  93. package/dist/core/mail/template-engine.js +239 -0
  94. package/dist/core/mail/template-engine.js.map +1 -0
  95. package/dist/core/mail/types.d.ts +237 -0
  96. package/dist/core/mail/types.js +4 -0
  97. package/dist/core/mail/types.js.map +1 -0
  98. package/dist/core/middleware/built-in/body-size/core.d.ts +12 -0
  99. package/dist/core/middleware/built-in/body-size/core.js +52 -0
  100. package/dist/core/middleware/built-in/body-size/core.js.map +1 -0
  101. package/dist/core/middleware/built-in/body-size/hook.d.ts +2 -0
  102. package/dist/core/middleware/built-in/body-size/hook.js +12 -0
  103. package/dist/core/middleware/built-in/body-size/hook.js.map +1 -0
  104. package/dist/core/middleware/built-in/body-size/index.d.ts +6 -0
  105. package/dist/core/middleware/built-in/body-size/index.js +7 -0
  106. package/dist/core/middleware/built-in/body-size/index.js.map +1 -0
  107. package/dist/core/middleware/built-in/body-size/middleware.d.ts +14 -0
  108. package/dist/core/middleware/built-in/body-size/middleware.js +22 -0
  109. package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -0
  110. package/dist/core/middleware/built-in/cache/core.d.ts +20 -1
  111. package/dist/core/middleware/built-in/cache/core.js.map +1 -1
  112. package/dist/core/middleware/built-in/cache/hook.d.ts +38 -1
  113. package/dist/core/middleware/built-in/cache/hook.js +202 -16
  114. package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
  115. package/dist/core/middleware/built-in/cache/index.js +1 -1
  116. package/dist/core/middleware/built-in/cache/index.js.map +1 -1
  117. package/dist/core/middleware/built-in/compression/core.d.ts +16 -0
  118. package/dist/core/middleware/built-in/compression/core.js +75 -0
  119. package/dist/core/middleware/built-in/compression/core.js.map +1 -0
  120. package/dist/core/middleware/built-in/compression/hook.d.ts +2 -0
  121. package/dist/core/middleware/built-in/compression/hook.js +14 -0
  122. package/dist/core/middleware/built-in/compression/hook.js.map +1 -0
  123. package/dist/core/middleware/built-in/compression/index.d.ts +6 -0
  124. package/dist/core/middleware/built-in/compression/index.js +7 -0
  125. package/dist/core/middleware/built-in/compression/index.js.map +1 -0
  126. package/dist/core/middleware/built-in/compression/middleware.d.ts +20 -0
  127. package/dist/core/middleware/built-in/compression/middleware.js +28 -0
  128. package/dist/core/middleware/built-in/compression/middleware.js.map +1 -0
  129. package/dist/core/middleware/built-in/cookie/core.js +37 -9
  130. package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
  131. package/dist/core/middleware/built-in/helmet/core.d.ts +19 -0
  132. package/dist/core/middleware/built-in/helmet/core.js +70 -0
  133. package/dist/core/middleware/built-in/helmet/core.js.map +1 -0
  134. package/dist/core/middleware/built-in/helmet/hook.d.ts +2 -0
  135. package/dist/core/middleware/built-in/helmet/hook.js +12 -0
  136. package/dist/core/middleware/built-in/helmet/hook.js.map +1 -0
  137. package/dist/core/middleware/built-in/helmet/index.d.ts +6 -0
  138. package/dist/core/middleware/built-in/helmet/index.js +7 -0
  139. package/dist/core/middleware/built-in/helmet/index.js.map +1 -0
  140. package/dist/core/middleware/built-in/helmet/middleware.d.ts +22 -0
  141. package/dist/core/middleware/built-in/helmet/middleware.js +28 -0
  142. package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -0
  143. package/dist/core/middleware/built-in/http2/core.d.ts +35 -0
  144. package/dist/core/middleware/built-in/http2/core.js +128 -0
  145. package/dist/core/middleware/built-in/http2/core.js.map +1 -0
  146. package/dist/core/middleware/built-in/http2/hook.d.ts +5 -0
  147. package/dist/core/middleware/built-in/http2/hook.js +34 -0
  148. package/dist/core/middleware/built-in/http2/hook.js.map +1 -0
  149. package/dist/core/middleware/built-in/http2/index.d.ts +8 -0
  150. package/dist/core/middleware/built-in/http2/index.js +10 -0
  151. package/dist/core/middleware/built-in/http2/index.js.map +1 -0
  152. package/dist/core/middleware/built-in/http2/middleware.d.ts +20 -0
  153. package/dist/core/middleware/built-in/http2/middleware.js +31 -0
  154. package/dist/core/middleware/built-in/http2/middleware.js.map +1 -0
  155. package/dist/core/middleware/built-in/index.d.ts +18 -0
  156. package/dist/core/middleware/built-in/index.js +28 -0
  157. package/dist/core/middleware/built-in/index.js.map +1 -1
  158. package/dist/core/middleware/built-in/range/core.d.ts +16 -0
  159. package/dist/core/middleware/built-in/range/core.js +112 -0
  160. package/dist/core/middleware/built-in/range/core.js.map +1 -0
  161. package/dist/core/middleware/built-in/range/hook.d.ts +2 -0
  162. package/dist/core/middleware/built-in/range/hook.js +12 -0
  163. package/dist/core/middleware/built-in/range/hook.js.map +1 -0
  164. package/dist/core/middleware/built-in/range/index.d.ts +6 -0
  165. package/dist/core/middleware/built-in/range/index.js +7 -0
  166. package/dist/core/middleware/built-in/range/index.js.map +1 -0
  167. package/dist/core/middleware/built-in/range/middleware.d.ts +21 -0
  168. package/dist/core/middleware/built-in/range/middleware.js +27 -0
  169. package/dist/core/middleware/built-in/range/middleware.js.map +1 -0
  170. package/dist/core/middleware/built-in/session/core.js +14 -1
  171. package/dist/core/middleware/built-in/session/core.js.map +1 -1
  172. package/dist/core/middleware/built-in/static/core.d.ts +20 -0
  173. package/dist/core/middleware/built-in/static/core.js +143 -0
  174. package/dist/core/middleware/built-in/static/core.js.map +1 -0
  175. package/dist/core/middleware/built-in/static/hook.d.ts +2 -0
  176. package/dist/core/middleware/built-in/static/hook.js +12 -0
  177. package/dist/core/middleware/built-in/static/hook.js.map +1 -0
  178. package/dist/core/middleware/built-in/static/index.d.ts +6 -0
  179. package/dist/core/middleware/built-in/static/index.js +7 -0
  180. package/dist/core/middleware/built-in/static/index.js.map +1 -0
  181. package/dist/core/middleware/built-in/static/middleware.d.ts +18 -0
  182. package/dist/core/middleware/built-in/static/middleware.js +26 -0
  183. package/dist/core/middleware/built-in/static/middleware.js.map +1 -0
  184. package/dist/core/middleware/built-in/template/core.d.ts +19 -0
  185. package/dist/core/middleware/built-in/template/core.js +108 -0
  186. package/dist/core/middleware/built-in/template/core.js.map +1 -0
  187. package/dist/core/middleware/built-in/template/hook.d.ts +2 -0
  188. package/dist/core/middleware/built-in/template/hook.js +12 -0
  189. package/dist/core/middleware/built-in/template/hook.js.map +1 -0
  190. package/dist/core/middleware/built-in/template/index.d.ts +6 -0
  191. package/dist/core/middleware/built-in/template/index.js +7 -0
  192. package/dist/core/middleware/built-in/template/index.js.map +1 -0
  193. package/dist/core/middleware/built-in/template/middleware.d.ts +21 -0
  194. package/dist/core/middleware/built-in/template/middleware.js +27 -0
  195. package/dist/core/middleware/built-in/template/middleware.js.map +1 -0
  196. package/dist/core/middleware/built-in/upload/core.d.ts +29 -0
  197. package/dist/core/middleware/built-in/upload/core.js +66 -0
  198. package/dist/core/middleware/built-in/upload/core.js.map +1 -0
  199. package/dist/core/middleware/built-in/upload/hook.d.ts +2 -0
  200. package/dist/core/middleware/built-in/upload/hook.js +25 -0
  201. package/dist/core/middleware/built-in/upload/hook.js.map +1 -0
  202. package/dist/core/middleware/built-in/upload/index.d.ts +6 -0
  203. package/dist/core/middleware/built-in/upload/index.js +7 -0
  204. package/dist/core/middleware/built-in/upload/index.js.map +1 -0
  205. package/dist/core/middleware/built-in/upload/middleware.d.ts +18 -0
  206. package/dist/core/middleware/built-in/upload/middleware.js +41 -0
  207. package/dist/core/middleware/built-in/upload/middleware.js.map +1 -0
  208. package/dist/core/middleware/built-in/validation/middleware.js +2 -1
  209. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
  210. package/dist/core/networking/adapters/uws-adapter.js +54 -6
  211. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  212. package/dist/core/networking/adapters/ws-adapter.js +56 -17
  213. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  214. package/dist/core/pooling/object-pool-manager.js +9 -1
  215. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  216. package/dist/core/queue/adapters/bull-adapter.d.ts +86 -0
  217. package/dist/core/queue/adapters/bull-adapter.js +330 -0
  218. package/dist/core/queue/adapters/bull-adapter.js.map +1 -0
  219. package/dist/core/queue/adapters/index.d.ts +9 -0
  220. package/dist/core/queue/adapters/index.js +10 -0
  221. package/dist/core/queue/adapters/index.js.map +1 -0
  222. package/dist/core/queue/adapters/kafka-adapter.d.ts +86 -0
  223. package/dist/core/queue/adapters/kafka-adapter.js +462 -0
  224. package/dist/core/queue/adapters/kafka-adapter.js.map +1 -0
  225. package/dist/core/queue/adapters/memory-adapter.d.ts +87 -0
  226. package/dist/core/queue/adapters/memory-adapter.js +415 -0
  227. package/dist/core/queue/adapters/memory-adapter.js.map +1 -0
  228. package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +86 -0
  229. package/dist/core/queue/adapters/rabbitmq-adapter.js +436 -0
  230. package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -0
  231. package/dist/core/queue/adapters/sqs-adapter.d.ts +102 -0
  232. package/dist/core/queue/adapters/sqs-adapter.js +522 -0
  233. package/dist/core/queue/adapters/sqs-adapter.js.map +1 -0
  234. package/dist/core/queue/index.d.ts +11 -0
  235. package/dist/core/queue/index.js +14 -0
  236. package/dist/core/queue/index.js.map +1 -0
  237. package/dist/core/queue/middleware/index.d.ts +7 -0
  238. package/dist/core/queue/middleware/index.js +8 -0
  239. package/dist/core/queue/middleware/index.js.map +1 -0
  240. package/dist/core/queue/middleware/monitoring.d.ts +84 -0
  241. package/dist/core/queue/middleware/monitoring.js +145 -0
  242. package/dist/core/queue/middleware/monitoring.js.map +1 -0
  243. package/dist/core/queue/middleware/priority.d.ts +61 -0
  244. package/dist/core/queue/middleware/priority.js +90 -0
  245. package/dist/core/queue/middleware/priority.js.map +1 -0
  246. package/dist/core/queue/middleware/rate-limit.d.ts +34 -0
  247. package/dist/core/queue/middleware/rate-limit.js +109 -0
  248. package/dist/core/queue/middleware/rate-limit.js.map +1 -0
  249. package/dist/core/queue/queue-adapter.d.ts +73 -0
  250. package/dist/core/queue/queue-adapter.js +20 -0
  251. package/dist/core/queue/queue-adapter.js.map +1 -0
  252. package/dist/core/queue/queue-manager.d.ts +92 -0
  253. package/dist/core/queue/queue-manager.js +327 -0
  254. package/dist/core/queue/queue-manager.js.map +1 -0
  255. package/dist/core/queue/types.d.ts +205 -0
  256. package/dist/core/queue/types.js +6 -0
  257. package/dist/core/queue/types.js.map +1 -0
  258. package/dist/core/routing/index.js +41 -10
  259. package/dist/core/routing/index.js.map +1 -1
  260. package/dist/core/routing/radix-tree.d.ts +48 -0
  261. package/dist/core/routing/radix-tree.js +211 -0
  262. package/dist/core/routing/radix-tree.js.map +1 -0
  263. package/dist/core/routing/router.d.ts +10 -9
  264. package/dist/core/routing/router.js +3 -1
  265. package/dist/core/routing/router.js.map +1 -1
  266. package/dist/core/routing/unified-router.d.ts +18 -12
  267. package/dist/core/routing/unified-router.js +220 -163
  268. package/dist/core/routing/unified-router.js.map +1 -1
  269. package/dist/core/runtime/aws-lambda-adapter.js +21 -10
  270. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  271. package/dist/core/runtime/base-adapter.js +15 -5
  272. package/dist/core/runtime/base-adapter.js.map +1 -1
  273. package/dist/core/runtime/cloudflare-workers-adapter.js +35 -12
  274. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  275. package/dist/core/runtime/vercel-edge-adapter.js +16 -6
  276. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  277. package/dist/core/utilities/container.js +3 -1
  278. package/dist/core/utilities/container.js.map +1 -1
  279. package/dist/core/workers/facade.d.ts +74 -0
  280. package/dist/core/workers/facade.js +98 -0
  281. package/dist/core/workers/facade.js.map +1 -0
  282. package/dist/core/workers/index.d.ts +2 -0
  283. package/dist/core/workers/index.js +6 -0
  284. package/dist/core/workers/index.js.map +1 -0
  285. package/dist/core/workers/worker-manager.d.ts +124 -0
  286. package/dist/core/workers/worker-manager.js +299 -0
  287. package/dist/core/workers/worker-manager.js.map +1 -0
  288. package/dist/core/workers/worker.d.ts +1 -0
  289. package/dist/core/workers/worker.js +225 -0
  290. package/dist/core/workers/worker.js.map +1 -0
  291. package/dist/index.d.ts +8 -1
  292. package/dist/index.js +6 -1
  293. package/dist/index.js.map +1 -1
  294. package/dist/moro.d.ts +345 -13
  295. package/dist/moro.js +803 -214
  296. package/dist/moro.js.map +1 -1
  297. package/dist/types/cache.d.ts +4 -0
  298. package/dist/types/config.d.ts +42 -0
  299. package/dist/types/core.d.ts +18 -1
  300. package/package.json +94 -20
@@ -0,0 +1,62 @@
1
+ import type { MailAdapter, MailOptions, MailResult } from './types.js';
2
+ /**
3
+ * Abstract base class for mail adapters
4
+ * Provides common functionality and interface
5
+ */
6
+ export declare abstract class BaseMailAdapter implements MailAdapter {
7
+ protected config: any;
8
+ protected initialized: boolean;
9
+ /**
10
+ * Initialize adapter with configuration
11
+ */
12
+ initialize(config: any): Promise<void>;
13
+ /**
14
+ * Send an email (must be implemented by subclasses)
15
+ */
16
+ abstract send(options: MailOptions): Promise<MailResult>;
17
+ /**
18
+ * Get adapter name (must be implemented by subclasses)
19
+ */
20
+ abstract getName(): string;
21
+ /**
22
+ * Send multiple emails in bulk
23
+ * Default implementation sends one by one
24
+ * Override for better performance
25
+ */
26
+ sendBulk(options: MailOptions[]): Promise<MailResult[]>;
27
+ /**
28
+ * Verify adapter connection (optional)
29
+ */
30
+ verify(): Promise<boolean>;
31
+ /**
32
+ * Close adapter connections (optional)
33
+ */
34
+ close(): Promise<void>;
35
+ /**
36
+ * Normalize email address
37
+ */
38
+ protected normalizeAddress(address: string | {
39
+ name?: string;
40
+ email: string;
41
+ }): {
42
+ name?: string;
43
+ email: string;
44
+ };
45
+ /**
46
+ * Normalize email addresses array
47
+ */
48
+ protected normalizeAddresses(addresses: string | string[] | {
49
+ name?: string;
50
+ email: string;
51
+ } | {
52
+ name?: string;
53
+ email: string;
54
+ }[]): {
55
+ name?: string;
56
+ email: string;
57
+ }[];
58
+ /**
59
+ * Check if adapter is initialized
60
+ */
61
+ protected ensureInitialized(): void;
62
+ }
@@ -0,0 +1,83 @@
1
+ // Base Mail Adapter Interface
2
+ // ESM-first module
3
+ /**
4
+ * Abstract base class for mail adapters
5
+ * Provides common functionality and interface
6
+ */
7
+ export class BaseMailAdapter {
8
+ config;
9
+ initialized = false;
10
+ /**
11
+ * Initialize adapter with configuration
12
+ */
13
+ async initialize(config) {
14
+ this.config = config;
15
+ this.initialized = true;
16
+ }
17
+ /**
18
+ * Send multiple emails in bulk
19
+ * Default implementation sends one by one
20
+ * Override for better performance
21
+ */
22
+ async sendBulk(options) {
23
+ if (!this.initialized) {
24
+ throw new Error(`${this.getName()} adapter not initialized`);
25
+ }
26
+ const results = [];
27
+ for (const mailOptions of options) {
28
+ try {
29
+ const result = await this.send(mailOptions);
30
+ results.push(result);
31
+ }
32
+ catch (error) {
33
+ results.push({
34
+ success: false,
35
+ error: error instanceof Error ? error.message : String(error),
36
+ });
37
+ }
38
+ }
39
+ return results;
40
+ }
41
+ /**
42
+ * Verify adapter connection (optional)
43
+ */
44
+ async verify() {
45
+ return this.initialized;
46
+ }
47
+ /**
48
+ * Close adapter connections (optional)
49
+ */
50
+ async close() {
51
+ this.initialized = false;
52
+ }
53
+ /**
54
+ * Normalize email address
55
+ */
56
+ normalizeAddress(address) {
57
+ if (typeof address === 'string') {
58
+ return { email: address };
59
+ }
60
+ return address;
61
+ }
62
+ /**
63
+ * Normalize email addresses array
64
+ */
65
+ normalizeAddresses(addresses) {
66
+ if (!addresses) {
67
+ return [];
68
+ }
69
+ if (Array.isArray(addresses)) {
70
+ return addresses.map(addr => this.normalizeAddress(addr));
71
+ }
72
+ return [this.normalizeAddress(addresses)];
73
+ }
74
+ /**
75
+ * Check if adapter is initialized
76
+ */
77
+ ensureInitialized() {
78
+ if (!this.initialized) {
79
+ throw new Error(`${this.getName()} adapter not initialized. Call initialize() first.`);
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=mail-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-adapter.js","sourceRoot":"","sources":["../../../src/core/mail/mail-adapter.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,mBAAmB;AAInB;;;GAGG;AACH,MAAM,OAAgB,eAAe;IACzB,MAAM,CAAM;IACZ,WAAW,GAAG,KAAK,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAW;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAYD;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAsB;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACO,gBAAgB,CAAC,OAAkD;QAI3E,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACO,kBAAkB,CAC1B,SAIsC;QAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACO,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,oDAAoD,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,63 @@
1
+ import type { MailConfig, MailOptions, MailResult, MailAdapter } from './types.js';
2
+ import { TemplateEngineManager } from './template-engine.js';
3
+ /**
4
+ * Main mail manager class
5
+ * Coordinates adapters, templates, and queue integration
6
+ */
7
+ export declare class MailManager {
8
+ private config;
9
+ private adapter?;
10
+ private templateEngine?;
11
+ private logger;
12
+ private defaultFrom?;
13
+ private queueManager?;
14
+ constructor(config?: MailConfig);
15
+ /**
16
+ * Initialize mail manager
17
+ */
18
+ initialize(): Promise<void>;
19
+ /**
20
+ * Load email adapter based on configuration
21
+ */
22
+ private loadAdapter;
23
+ /**
24
+ * Send an email
25
+ */
26
+ send(options: MailOptions): Promise<MailResult>;
27
+ /**
28
+ * Send email directly (synchronous)
29
+ */
30
+ private sendDirect;
31
+ /**
32
+ * Send email via queue (asynchronous)
33
+ */
34
+ private sendViaQueue;
35
+ /**
36
+ * Send multiple emails in bulk
37
+ */
38
+ sendBulk(options: MailOptions[]): Promise<MailResult[]>;
39
+ /**
40
+ * Send bulk emails via queue
41
+ */
42
+ private sendBulkViaQueue;
43
+ /**
44
+ * Set queue manager for async email sending
45
+ */
46
+ setQueueManager(queueManager: any): void;
47
+ /**
48
+ * Verify adapter connection
49
+ */
50
+ verify(): Promise<boolean>;
51
+ /**
52
+ * Close connections and clean up
53
+ */
54
+ close(): Promise<void>;
55
+ /**
56
+ * Get template engine
57
+ */
58
+ getTemplateEngine(): TemplateEngineManager | undefined;
59
+ /**
60
+ * Get adapter
61
+ */
62
+ getAdapter(): MailAdapter | undefined;
63
+ }
@@ -0,0 +1,302 @@
1
+ // Mail Manager - Main Email System Controller
2
+ // ESM-first module
3
+ import { TemplateEngineManager } from './template-engine.js';
4
+ import { createFrameworkLogger } from '../logger/index.js';
5
+ /**
6
+ * Main mail manager class
7
+ * Coordinates adapters, templates, and queue integration
8
+ */
9
+ export class MailManager {
10
+ config;
11
+ adapter;
12
+ templateEngine;
13
+ logger;
14
+ defaultFrom;
15
+ queueManager;
16
+ constructor(config = {}) {
17
+ this.config = config;
18
+ this.logger = createFrameworkLogger('Mail');
19
+ this.defaultFrom = config.from;
20
+ }
21
+ /**
22
+ * Initialize mail manager
23
+ */
24
+ async initialize() {
25
+ this.logger.info('Initializing mail system', 'Mail', {
26
+ adapter: this.config.adapter || 'console',
27
+ templates: !!this.config.templates?.path,
28
+ queue: this.config.queue?.enabled || false,
29
+ });
30
+ // Load adapter
31
+ await this.loadAdapter();
32
+ // Initialize template engine if configured
33
+ if (this.config.templates) {
34
+ this.templateEngine = new TemplateEngineManager(this.config.templates);
35
+ if (this.config.templates.engine && this.config.templates.engine !== 'moro') {
36
+ await this.templateEngine.loadExternalEngine(this.config.templates.engine);
37
+ }
38
+ if (this.config.templates.partials) {
39
+ await this.templateEngine.loadPartials();
40
+ }
41
+ if (this.config.templates.helpers) {
42
+ for (const [name, fn] of Object.entries(this.config.templates.helpers)) {
43
+ this.templateEngine.registerHelper(name, fn);
44
+ }
45
+ }
46
+ }
47
+ this.logger.info('Mail system initialized successfully', 'Mail');
48
+ }
49
+ /**
50
+ * Load email adapter based on configuration
51
+ */
52
+ async loadAdapter() {
53
+ const adapterType = (this.config.adapter || 'console');
54
+ this.logger.debug(`Loading ${adapterType} adapter`, 'Mail');
55
+ try {
56
+ if (adapterType === 'console') {
57
+ const { ConsoleAdapter } = await import('./adapters/console-adapter.js');
58
+ this.adapter = new ConsoleAdapter();
59
+ }
60
+ else if (adapterType === 'nodemailer') {
61
+ const { NodemailerAdapter } = await import('./adapters/nodemailer-adapter.js');
62
+ this.adapter = new NodemailerAdapter();
63
+ }
64
+ else if (adapterType === 'sendgrid') {
65
+ const { SendGridAdapter } = await import('./adapters/sendgrid-adapter.js');
66
+ this.adapter = new SendGridAdapter();
67
+ }
68
+ else if (adapterType === 'ses') {
69
+ const { SESAdapter } = await import('./adapters/ses-adapter.js');
70
+ this.adapter = new SESAdapter();
71
+ }
72
+ else if (adapterType === 'resend') {
73
+ const { ResendAdapter } = await import('./adapters/resend-adapter.js');
74
+ this.adapter = new ResendAdapter();
75
+ }
76
+ else {
77
+ throw new Error(`Unknown mail adapter: ${adapterType}`);
78
+ }
79
+ await this.adapter.initialize(this.config.connection || {});
80
+ this.logger.info(`${this.adapter.getName()} adapter loaded successfully`, 'Mail');
81
+ }
82
+ catch (error) {
83
+ this.logger.error(`Failed to load ${adapterType} adapter`, 'Mail', { error });
84
+ throw error;
85
+ }
86
+ }
87
+ /**
88
+ * Send an email
89
+ */
90
+ async send(options) {
91
+ if (!this.adapter) {
92
+ throw new Error('Mail adapter not initialized');
93
+ }
94
+ if (!options.from && !this.defaultFrom) {
95
+ throw new Error('Email "from" address not specified');
96
+ }
97
+ const mailOptions = {
98
+ ...options,
99
+ from: options.from || this.defaultFrom,
100
+ };
101
+ if (!mailOptions.from) {
102
+ throw new Error('Email "from" address could not be determined');
103
+ }
104
+ if (options.template && this.templateEngine) {
105
+ try {
106
+ const rendered = await this.templateEngine.renderFile(options.template, options.data || {});
107
+ if (rendered.html) {
108
+ mailOptions.html = rendered.html;
109
+ }
110
+ if (rendered.text) {
111
+ mailOptions.text = rendered.text;
112
+ }
113
+ }
114
+ catch (error) {
115
+ this.logger.error('Template rendering failed', 'Mail', {
116
+ error,
117
+ template: options.template,
118
+ });
119
+ throw error;
120
+ }
121
+ }
122
+ if (this.config.queue?.enabled && this.queueManager) {
123
+ return this.sendViaQueue(mailOptions);
124
+ }
125
+ return this.sendDirect(mailOptions);
126
+ }
127
+ /**
128
+ * Send email directly (synchronous)
129
+ */
130
+ async sendDirect(options) {
131
+ if (!this.adapter) {
132
+ throw new Error('Mail adapter not initialized');
133
+ }
134
+ try {
135
+ this.logger.debug('Sending email', 'Mail', {
136
+ to: options.to,
137
+ subject: options.subject,
138
+ });
139
+ const result = await this.adapter.send(options);
140
+ if (result.success) {
141
+ this.logger.info('Email sent successfully', 'Mail', {
142
+ to: options.to,
143
+ subject: options.subject,
144
+ messageId: result.messageId,
145
+ });
146
+ }
147
+ else {
148
+ this.logger.warn('Email send failed', 'Mail', {
149
+ to: options.to,
150
+ subject: options.subject,
151
+ error: result.error,
152
+ });
153
+ }
154
+ return result;
155
+ }
156
+ catch (error) {
157
+ this.logger.error('Email send error', 'Mail', {
158
+ error,
159
+ to: options.to,
160
+ subject: options.subject,
161
+ });
162
+ return {
163
+ success: false,
164
+ error: error instanceof Error ? error.message : String(error),
165
+ };
166
+ }
167
+ }
168
+ /**
169
+ * Send email via queue (asynchronous)
170
+ */
171
+ async sendViaQueue(options) {
172
+ if (!this.queueManager) {
173
+ throw new Error('Queue manager not set. Call setQueueManager() first.');
174
+ }
175
+ const queueName = this.config.queue?.name || 'emails';
176
+ try {
177
+ const job = await this.queueManager.addToQueue(queueName, options, {
178
+ priority: this.config.queue?.priority || 0,
179
+ delay: this.config.queue?.delay || 0,
180
+ attempts: this.config.queue?.attempts || 3,
181
+ });
182
+ this.logger.info('Email queued for sending', 'Mail', {
183
+ jobId: job.id,
184
+ to: options.to,
185
+ subject: options.subject,
186
+ });
187
+ return {
188
+ success: true,
189
+ messageId: job.id,
190
+ };
191
+ }
192
+ catch (error) {
193
+ this.logger.error('Failed to queue email', 'Mail', { error });
194
+ return {
195
+ success: false,
196
+ error: error instanceof Error ? error.message : String(error),
197
+ };
198
+ }
199
+ }
200
+ /**
201
+ * Send multiple emails in bulk
202
+ */
203
+ async sendBulk(options) {
204
+ if (!this.adapter) {
205
+ throw new Error('Mail adapter not initialized');
206
+ }
207
+ const mailOptions = options.map(opts => ({
208
+ ...opts,
209
+ from: opts.from || this.defaultFrom,
210
+ }));
211
+ if (mailOptions.some(opts => !opts.from)) {
212
+ throw new Error('Email "from" address not specified for one or more emails');
213
+ }
214
+ if (this.config.queue?.enabled && this.queueManager) {
215
+ return this.sendBulkViaQueue(mailOptions);
216
+ }
217
+ if (this.adapter.sendBulk) {
218
+ return this.adapter.sendBulk(mailOptions);
219
+ }
220
+ const results = [];
221
+ for (const opts of mailOptions) {
222
+ results.push(await this.send(opts));
223
+ }
224
+ return results;
225
+ }
226
+ /**
227
+ * Send bulk emails via queue
228
+ */
229
+ async sendBulkViaQueue(options) {
230
+ if (!this.queueManager) {
231
+ throw new Error('Queue manager not set');
232
+ }
233
+ const queueName = this.config.queue?.name || 'emails';
234
+ const jobs = options.map(opts => ({
235
+ data: opts,
236
+ options: {
237
+ priority: this.config.queue?.priority || 0,
238
+ delay: this.config.queue?.delay || 0,
239
+ attempts: this.config.queue?.attempts || 3,
240
+ },
241
+ }));
242
+ try {
243
+ const queuedJobs = await this.queueManager.addBulkToQueue(queueName, jobs);
244
+ return queuedJobs.map((job) => ({
245
+ success: true,
246
+ messageId: job.id,
247
+ }));
248
+ }
249
+ catch (error) {
250
+ this.logger.error('Failed to queue bulk emails', 'Mail', { error });
251
+ return options.map(() => ({
252
+ success: false,
253
+ error: error instanceof Error ? error.message : String(error),
254
+ }));
255
+ }
256
+ }
257
+ /**
258
+ * Set queue manager for async email sending
259
+ */
260
+ setQueueManager(queueManager) {
261
+ this.queueManager = queueManager;
262
+ }
263
+ /**
264
+ * Verify adapter connection
265
+ */
266
+ async verify() {
267
+ if (!this.adapter || !this.adapter.verify) {
268
+ return false;
269
+ }
270
+ try {
271
+ return await this.adapter.verify();
272
+ }
273
+ catch (error) {
274
+ this.logger.error('Adapter verification failed', 'Mail', { error });
275
+ return false;
276
+ }
277
+ }
278
+ /**
279
+ * Close connections and clean up
280
+ */
281
+ async close() {
282
+ if (this.adapter?.close) {
283
+ await this.adapter.close();
284
+ }
285
+ if (this.templateEngine) {
286
+ this.templateEngine.clearCache();
287
+ }
288
+ }
289
+ /**
290
+ * Get template engine
291
+ */
292
+ getTemplateEngine() {
293
+ return this.templateEngine;
294
+ }
295
+ /**
296
+ * Get adapter
297
+ */
298
+ getAdapter() {
299
+ return this.adapter;
300
+ }
301
+ }
302
+ //# sourceMappingURL=mail-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-manager.js","sourceRoot":"","sources":["../../../src/core/mail/mail-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { TemplateConfig, TemplateEngine, TemplateResult } from './types.js';
2
+ /**
3
+ * Main template engine manager
4
+ */
5
+ export declare class TemplateEngineManager {
6
+ private config;
7
+ private engine;
8
+ private cache;
9
+ private engineType;
10
+ constructor(config?: TemplateConfig);
11
+ /**
12
+ * Create template engine instance
13
+ */
14
+ private createEngine;
15
+ /**
16
+ * Render a template file with data
17
+ */
18
+ renderFile(templateName: string, data: Record<string, any>): Promise<TemplateResult>;
19
+ /**
20
+ * Render a template string with data
21
+ */
22
+ renderString(template: string, data: Record<string, any>): Promise<string>;
23
+ /**
24
+ * Load external template engine (Handlebars, EJS)
25
+ */
26
+ loadExternalEngine(type: TemplateEngine): Promise<void>;
27
+ /**
28
+ * Register a helper function
29
+ */
30
+ registerHelper(name: string, fn: (...args: any[]) => any): void;
31
+ /**
32
+ * Register a partial template
33
+ */
34
+ registerPartial(name: string, template: string): void;
35
+ /**
36
+ * Clear template cache
37
+ */
38
+ clearCache(): void;
39
+ /**
40
+ * Load partials from directory
41
+ */
42
+ loadPartials(): Promise<void>;
43
+ }