@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,169 @@
1
+ // Resend Adapter - Modern Email API
2
+ // ESM-first module with lazy loading
3
+ import { BaseMailAdapter } from '../mail-adapter.js';
4
+ import { isPackageAvailable, resolveUserPackage } from '../../utilities/package-utils.js';
5
+ import { createFrameworkLogger } from '../../logger/index.js';
6
+ /**
7
+ * Resend adapter for email sending
8
+ * Supports Resend's modern email API
9
+ */
10
+ export class ResendAdapter extends BaseMailAdapter {
11
+ client;
12
+ logger;
13
+ constructor() {
14
+ super();
15
+ this.logger = createFrameworkLogger('Mail:Resend');
16
+ }
17
+ async initialize(config) {
18
+ if (!config.apiKey) {
19
+ throw new Error('Resend API key is required');
20
+ }
21
+ if (!isPackageAvailable('resend')) {
22
+ throw new Error('Resend package is not installed.\n' +
23
+ 'Install it with: npm install resend\n' +
24
+ 'Or use a different mail adapter.');
25
+ }
26
+ const resendPath = resolveUserPackage('resend');
27
+ const { Resend } = await import(resendPath);
28
+ this.client = new Resend(config.apiKey);
29
+ await super.initialize(config);
30
+ this.logger.info('Resend adapter initialized', 'Mail');
31
+ }
32
+ async send(options) {
33
+ this.ensureInitialized();
34
+ if (!this.client) {
35
+ throw new Error('Resend client not initialized');
36
+ }
37
+ try {
38
+ const emailData = {
39
+ from: this.formatAddress(options.from),
40
+ to: this.formatAddressesArray(options.to),
41
+ subject: options.subject,
42
+ text: options.text,
43
+ html: options.html,
44
+ };
45
+ if (options.cc) {
46
+ emailData.cc = this.formatAddressesArray(options.cc);
47
+ }
48
+ if (options.bcc) {
49
+ emailData.bcc = this.formatAddressesArray(options.bcc);
50
+ }
51
+ if (options.replyTo) {
52
+ emailData.reply_to = this.formatAddress(options.replyTo);
53
+ }
54
+ if (options.attachments) {
55
+ emailData.attachments = options.attachments.map(att => ({
56
+ filename: att.filename,
57
+ content: Buffer.isBuffer(att.content) ? att.content : Buffer.from(att.content),
58
+ }));
59
+ }
60
+ // Build headers with compliance fields
61
+ const headers = { ...options.headers };
62
+ if (options.messageId) {
63
+ headers['Message-ID'] = options.messageId;
64
+ }
65
+ if (options.references) {
66
+ headers['References'] = Array.isArray(options.references)
67
+ ? options.references.join(' ')
68
+ : options.references;
69
+ }
70
+ if (options.inReplyTo) {
71
+ headers['In-Reply-To'] = options.inReplyTo;
72
+ }
73
+ // List management headers (RFC 2369)
74
+ if (options.listUnsubscribe) {
75
+ headers['List-Unsubscribe'] = Array.isArray(options.listUnsubscribe)
76
+ ? `<${options.listUnsubscribe.join('>, <')}>`
77
+ : `<${options.listUnsubscribe}>`;
78
+ }
79
+ if (options.listUnsubscribePost) {
80
+ headers['List-Unsubscribe-Post'] = options.listUnsubscribePost;
81
+ }
82
+ if (options.listId) {
83
+ headers['List-ID'] = options.listId;
84
+ }
85
+ if (Object.keys(headers).length > 0) {
86
+ emailData.headers = headers;
87
+ }
88
+ // Resend-specific features
89
+ if (options.tags && options.tags.length > 0) {
90
+ emailData.tags = options.tags.map(tag => ({ name: tag }));
91
+ }
92
+ if (options.scheduledAt) {
93
+ emailData.scheduledAt = options.scheduledAt.toISOString();
94
+ }
95
+ const response = await this.client.emails.send(emailData);
96
+ return {
97
+ success: true,
98
+ messageId: response.id,
99
+ response: JSON.stringify(response),
100
+ };
101
+ }
102
+ catch (error) {
103
+ this.logger.error('Failed to send email via Resend', 'Mail', { error });
104
+ return {
105
+ success: false,
106
+ error: error?.message || String(error),
107
+ };
108
+ }
109
+ }
110
+ async sendBulk(options) {
111
+ this.ensureInitialized();
112
+ if (!this.client) {
113
+ throw new Error('Resend client not initialized');
114
+ }
115
+ try {
116
+ const emails = options.map(opts => ({
117
+ from: this.formatAddress(opts.from),
118
+ to: this.formatAddressesArray(opts.to),
119
+ subject: opts.subject,
120
+ text: opts.text,
121
+ html: opts.html,
122
+ }));
123
+ const response = await this.client.batch.send(emails);
124
+ return response.data.map((res) => ({
125
+ success: true,
126
+ messageId: res.id,
127
+ response: JSON.stringify(res),
128
+ }));
129
+ }
130
+ catch (error) {
131
+ this.logger.error('Failed to send bulk emails via Resend', 'Mail', { error });
132
+ return options.map(() => ({
133
+ success: false,
134
+ error: error?.message || String(error),
135
+ }));
136
+ }
137
+ }
138
+ getName() {
139
+ return 'Resend';
140
+ }
141
+ async verify() {
142
+ return this.initialized;
143
+ }
144
+ formatAddress(address) {
145
+ if (!address) {
146
+ return '';
147
+ }
148
+ if (typeof address === 'string') {
149
+ return address;
150
+ }
151
+ if (address.name) {
152
+ return `${address.name} <${address.email}>`;
153
+ }
154
+ return address.email;
155
+ }
156
+ formatAddressesArray(addresses) {
157
+ if (!addresses) {
158
+ return [];
159
+ }
160
+ if (typeof addresses === 'string') {
161
+ return [addresses];
162
+ }
163
+ if (Array.isArray(addresses)) {
164
+ return addresses.map(addr => this.formatAddress(addr));
165
+ }
166
+ return [this.formatAddress(addresses)];
167
+ }
168
+ }
169
+ //# sourceMappingURL=resend-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resend-adapter.js","sourceRoot":"","sources":["../../../../src/core/mail/adapters/resend-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BaseMailAdapter } from '../mail-adapter.js';
2
+ import type { MailOptions, MailResult, SendGridConnection } from '../types.js';
3
+ /**
4
+ * SendGrid adapter for email sending
5
+ * Supports SendGrid API features
6
+ */
7
+ export declare class SendGridAdapter extends BaseMailAdapter {
8
+ private client;
9
+ private logger;
10
+ private sandboxMode;
11
+ constructor();
12
+ initialize(config: SendGridConnection): Promise<void>;
13
+ send(options: MailOptions): Promise<MailResult>;
14
+ sendBulk(options: MailOptions[]): Promise<MailResult[]>;
15
+ getName(): string;
16
+ verify(): Promise<boolean>;
17
+ private formatAddress;
18
+ private formatAddressesArray;
19
+ }
@@ -0,0 +1,186 @@
1
+ // SendGrid Adapter - SendGrid Email Service
2
+ // ESM-first module with lazy loading
3
+ import { BaseMailAdapter } from '../mail-adapter.js';
4
+ import { isPackageAvailable, resolveUserPackage } from '../../utilities/package-utils.js';
5
+ import { createFrameworkLogger } from '../../logger/index.js';
6
+ /**
7
+ * SendGrid adapter for email sending
8
+ * Supports SendGrid API features
9
+ */
10
+ export class SendGridAdapter extends BaseMailAdapter {
11
+ client;
12
+ logger;
13
+ sandboxMode;
14
+ constructor() {
15
+ super();
16
+ this.logger = createFrameworkLogger('Mail:SendGrid');
17
+ this.sandboxMode = false;
18
+ }
19
+ async initialize(config) {
20
+ if (!config.apiKey) {
21
+ throw new Error('SendGrid API key is required');
22
+ }
23
+ if (!isPackageAvailable('@sendgrid/mail')) {
24
+ throw new Error('SendGrid mail package is not installed.\n' +
25
+ 'Install it with: npm install @sendgrid/mail\n' +
26
+ 'Or use a different mail adapter.');
27
+ }
28
+ const sendgridPath = resolveUserPackage('@sendgrid/mail');
29
+ const sgMail = await import(sendgridPath);
30
+ sgMail.default.setApiKey(config.apiKey);
31
+ this.client = sgMail.default;
32
+ this.sandboxMode = config.sandboxMode || false;
33
+ await super.initialize(config);
34
+ this.logger.info('SendGrid adapter initialized', 'Mail');
35
+ }
36
+ async send(options) {
37
+ this.ensureInitialized();
38
+ if (!this.client) {
39
+ throw new Error('SendGrid client not initialized');
40
+ }
41
+ try {
42
+ const msg = {
43
+ from: this.formatAddress(options.from),
44
+ to: this.formatAddressesArray(options.to),
45
+ subject: options.subject,
46
+ text: options.text,
47
+ html: options.html,
48
+ };
49
+ if (options.cc) {
50
+ msg.cc = this.formatAddressesArray(options.cc);
51
+ }
52
+ if (options.bcc) {
53
+ msg.bcc = this.formatAddressesArray(options.bcc);
54
+ }
55
+ if (options.replyTo) {
56
+ msg.replyTo = this.formatAddress(options.replyTo);
57
+ }
58
+ if (options.attachments) {
59
+ msg.attachments = options.attachments.map(att => ({
60
+ filename: att.filename,
61
+ content: Buffer.isBuffer(att.content) ? att.content.toString('base64') : att.content,
62
+ type: att.contentType,
63
+ disposition: 'attachment',
64
+ contentId: att.cid,
65
+ }));
66
+ }
67
+ // Build headers with compliance fields
68
+ const headers = { ...options.headers };
69
+ if (options.messageId) {
70
+ headers['Message-ID'] = options.messageId;
71
+ }
72
+ if (options.references) {
73
+ headers['References'] = Array.isArray(options.references)
74
+ ? options.references.join(' ')
75
+ : options.references;
76
+ }
77
+ if (options.inReplyTo) {
78
+ headers['In-Reply-To'] = options.inReplyTo;
79
+ }
80
+ // List management headers (RFC 2369)
81
+ if (options.listUnsubscribe) {
82
+ headers['List-Unsubscribe'] = Array.isArray(options.listUnsubscribe)
83
+ ? `<${options.listUnsubscribe.join('>, <')}>`
84
+ : `<${options.listUnsubscribe}>`;
85
+ }
86
+ if (options.listUnsubscribePost) {
87
+ headers['List-Unsubscribe-Post'] = options.listUnsubscribePost;
88
+ }
89
+ if (options.listId) {
90
+ headers['List-ID'] = options.listId;
91
+ }
92
+ if (Object.keys(headers).length > 0) {
93
+ msg.headers = headers;
94
+ }
95
+ // SendGrid-specific features
96
+ if (options.tags && options.tags.length > 0) {
97
+ msg.categories = options.tags;
98
+ }
99
+ if (options.metadata) {
100
+ msg.customArgs = options.metadata;
101
+ }
102
+ if (options.scheduledAt) {
103
+ msg.sendAt = Math.floor(options.scheduledAt.getTime() / 1000);
104
+ }
105
+ if (this.sandboxMode) {
106
+ msg.mailSettings = {
107
+ sandboxMode: {
108
+ enable: true,
109
+ },
110
+ };
111
+ }
112
+ const response = await this.client.send(msg);
113
+ return {
114
+ success: true,
115
+ messageId: response[0]?.headers?.['x-message-id'],
116
+ response: JSON.stringify(response[0]),
117
+ };
118
+ }
119
+ catch (error) {
120
+ this.logger.error('Failed to send email via SendGrid', 'Mail', { error });
121
+ return {
122
+ success: false,
123
+ error: error?.message || String(error),
124
+ };
125
+ }
126
+ }
127
+ async sendBulk(options) {
128
+ this.ensureInitialized();
129
+ if (!this.client) {
130
+ throw new Error('SendGrid client not initialized');
131
+ }
132
+ try {
133
+ const messages = options.map(opts => ({
134
+ from: this.formatAddress(opts.from),
135
+ to: this.formatAddressesArray(opts.to),
136
+ subject: opts.subject,
137
+ text: opts.text,
138
+ html: opts.html,
139
+ }));
140
+ const response = await this.client.send(messages);
141
+ return response.map((res) => ({
142
+ success: true,
143
+ messageId: res?.headers?.['x-message-id'],
144
+ response: JSON.stringify(res),
145
+ }));
146
+ }
147
+ catch (error) {
148
+ this.logger.error('Failed to send bulk emails via SendGrid', 'Mail', { error });
149
+ return options.map(() => ({
150
+ success: false,
151
+ error: error?.message || String(error),
152
+ }));
153
+ }
154
+ }
155
+ getName() {
156
+ return 'SendGrid';
157
+ }
158
+ async verify() {
159
+ return this.initialized;
160
+ }
161
+ formatAddress(address) {
162
+ if (!address) {
163
+ return '';
164
+ }
165
+ if (typeof address === 'string') {
166
+ return { email: address };
167
+ }
168
+ return {
169
+ email: address.email,
170
+ name: address.name,
171
+ };
172
+ }
173
+ formatAddressesArray(addresses) {
174
+ if (!addresses) {
175
+ return [];
176
+ }
177
+ if (typeof addresses === 'string') {
178
+ return [{ email: addresses }];
179
+ }
180
+ if (Array.isArray(addresses)) {
181
+ return addresses.map(addr => this.formatAddress(addr));
182
+ }
183
+ return [this.formatAddress(addresses)];
184
+ }
185
+ }
186
+ //# sourceMappingURL=sendgrid-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendgrid-adapter.js","sourceRoot":"","sources":["../../../../src/core/mail/adapters/sendgrid-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseMailAdapter } from '../mail-adapter.js';
2
+ import type { MailOptions, MailResult, SESConnection } from '../types.js';
3
+ /**
4
+ * AWS SES adapter for email sending
5
+ * Supports AWS Simple Email Service
6
+ */
7
+ export declare class SESAdapter extends BaseMailAdapter {
8
+ private client;
9
+ private logger;
10
+ private configurationSet?;
11
+ constructor();
12
+ initialize(config: SESConnection): Promise<void>;
13
+ send(options: MailOptions): Promise<MailResult>;
14
+ getName(): string;
15
+ verify(): Promise<boolean>;
16
+ private formatSingleAddress;
17
+ private formatAddressesArray;
18
+ }
@@ -0,0 +1,167 @@
1
+ // AWS SES Adapter - Amazon Simple Email Service
2
+ // ESM-first module with lazy loading
3
+ import { BaseMailAdapter } from '../mail-adapter.js';
4
+ import { isPackageAvailable, resolveUserPackage } from '../../utilities/package-utils.js';
5
+ import { createFrameworkLogger } from '../../logger/index.js';
6
+ /**
7
+ * AWS SES adapter for email sending
8
+ * Supports AWS Simple Email Service
9
+ */
10
+ export class SESAdapter extends BaseMailAdapter {
11
+ client;
12
+ logger;
13
+ configurationSet;
14
+ constructor() {
15
+ super();
16
+ this.logger = createFrameworkLogger('Mail:SES');
17
+ }
18
+ async initialize(config) {
19
+ if (!config.region) {
20
+ throw new Error('AWS region is required for SES adapter');
21
+ }
22
+ if (!isPackageAvailable('@aws-sdk/client-ses')) {
23
+ throw new Error('AWS SES SDK is not installed.\n' +
24
+ 'Install it with: npm install @aws-sdk/client-ses\n' +
25
+ 'Or use a different mail adapter.');
26
+ }
27
+ const sesPath = resolveUserPackage('@aws-sdk/client-ses');
28
+ const { SESClient } = await import(sesPath);
29
+ const clientConfig = {
30
+ region: config.region,
31
+ };
32
+ if (config.credentials) {
33
+ clientConfig.credentials = config.credentials;
34
+ }
35
+ else if (config.accessKeyId && config.secretAccessKey) {
36
+ clientConfig.credentials = {
37
+ accessKeyId: config.accessKeyId,
38
+ secretAccessKey: config.secretAccessKey,
39
+ };
40
+ }
41
+ this.client = new SESClient(clientConfig);
42
+ this.configurationSet = config.configurationSet;
43
+ await super.initialize(config);
44
+ this.logger.info('AWS SES adapter initialized', 'Mail');
45
+ }
46
+ async send(options) {
47
+ this.ensureInitialized();
48
+ if (!this.client) {
49
+ throw new Error('SES client not initialized');
50
+ }
51
+ try {
52
+ const sesPath = resolveUserPackage('@aws-sdk/client-ses');
53
+ const { SendEmailCommand } = await import(sesPath);
54
+ const destination = {
55
+ ToAddresses: this.formatAddressesArray(options.to),
56
+ };
57
+ if (options.cc) {
58
+ destination.CcAddresses = this.formatAddressesArray(options.cc);
59
+ }
60
+ if (options.bcc) {
61
+ destination.BccAddresses = this.formatAddressesArray(options.bcc);
62
+ }
63
+ const message = {
64
+ Subject: {
65
+ Data: options.subject,
66
+ Charset: 'UTF-8',
67
+ },
68
+ Body: {},
69
+ };
70
+ if (options.text) {
71
+ message.Body.Text = {
72
+ Data: options.text,
73
+ Charset: 'UTF-8',
74
+ };
75
+ }
76
+ if (options.html) {
77
+ message.Body.Html = {
78
+ Data: options.html,
79
+ Charset: 'UTF-8',
80
+ };
81
+ }
82
+ const commandParams = {
83
+ Source: this.formatSingleAddress(options.from),
84
+ Destination: destination,
85
+ Message: message,
86
+ ReplyToAddresses: options.replyTo ? [this.formatSingleAddress(options.replyTo)] : undefined,
87
+ ConfigurationSetName: this.configurationSet,
88
+ };
89
+ if (options.returnPath) {
90
+ commandParams.ReturnPath = options.returnPath;
91
+ }
92
+ // Add custom headers via Tags (SES limitation - headers must be added via raw email)
93
+ if (options.tags && options.tags.length > 0) {
94
+ commandParams.Tags = options.tags.map((tag, index) => ({
95
+ Name: `tag-${index}`,
96
+ Value: tag,
97
+ }));
98
+ }
99
+ const command = new SendEmailCommand(commandParams);
100
+ const response = await this.client.send(command);
101
+ return {
102
+ success: true,
103
+ messageId: response.MessageId,
104
+ response: JSON.stringify(response),
105
+ };
106
+ }
107
+ catch (error) {
108
+ this.logger.error('Failed to send email via SES', 'Mail', { error });
109
+ return {
110
+ success: false,
111
+ error: error?.message || String(error),
112
+ };
113
+ }
114
+ }
115
+ getName() {
116
+ return 'AWS SES';
117
+ }
118
+ async verify() {
119
+ if (!this.client) {
120
+ return false;
121
+ }
122
+ try {
123
+ const sesPath = resolveUserPackage('@aws-sdk/client-ses');
124
+ const { GetAccountSendingEnabledCommand } = await import(sesPath);
125
+ const command = new GetAccountSendingEnabledCommand({});
126
+ await this.client.send(command);
127
+ return true;
128
+ }
129
+ catch (error) {
130
+ this.logger.error('SES verification failed', 'Mail', { error });
131
+ return false;
132
+ }
133
+ }
134
+ formatSingleAddress(address) {
135
+ if (!address) {
136
+ return '';
137
+ }
138
+ if (typeof address === 'string') {
139
+ return address;
140
+ }
141
+ if (address.name) {
142
+ return `"${address.name}" <${address.email}>`;
143
+ }
144
+ return address.email;
145
+ }
146
+ formatAddressesArray(addresses) {
147
+ if (!addresses) {
148
+ return [];
149
+ }
150
+ if (typeof addresses === 'string') {
151
+ return [addresses];
152
+ }
153
+ if (Array.isArray(addresses)) {
154
+ return addresses.map(addr => {
155
+ if (typeof addr === 'string') {
156
+ return addr;
157
+ }
158
+ return addr.email;
159
+ });
160
+ }
161
+ if (typeof addresses === 'object') {
162
+ return [addresses.email];
163
+ }
164
+ return [];
165
+ }
166
+ }
167
+ //# sourceMappingURL=ses-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ses-adapter.js","sourceRoot":"","sources":["../../../../src/core/mail/adapters/ses-adapter.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,qCAAqC;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;IACrC,MAAM,CAAM;IACZ,MAAM,CAAS;IACf,gBAAgB,CAAU;IAElC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAqB;QACpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,iCAAiC;gBAC/B,oDAAoD;gBACpD,kCAAkC,CACrC,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5C,MAAM,YAAY,GAAQ;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;QAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAChD,CAAC;aAAM,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACxD,YAAY,CAAC,WAAW,GAAG;gBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEhD,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;YAC1D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnD,MAAM,WAAW,GAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;aACnD,CAAC;YAEF,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;gBACf,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,OAAO,GAAQ;gBACnB,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO,CAAC,OAAO;oBACrB,OAAO,EAAE,OAAO;iBACjB;gBACD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAQ;gBACzB,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9C,WAAW,EAAE,WAAW;gBACxB,OAAO,EAAE,OAAO;gBAChB,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3F,oBAAoB,EAAE,IAAI,CAAC,gBAAgB;aAC5C,CAAC;YAEF,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAChD,CAAC;YAED,qFAAqF;YACrF,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,aAAa,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC;oBACrE,IAAI,EAAE,OAAO,KAAK,EAAE;oBACpB,KAAK,EAAE,GAAG;iBACX,CAAC,CAAC,CAAC;YACN,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAEpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;aACnC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAErE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;aACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;YAC1D,MAAM,EAAE,+BAA+B,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAElE,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,OAAY;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,KAAK,GAAG,CAAC;QAChD,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC;IACvB,CAAC;IAEO,oBAAoB,CAAC,SAAc;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export type { MailConfig, MailOptions, MailResult, MailAdapter, MailAdapterType, EmailAddress, EmailAttachment, TemplateConfig, TemplateEngine, MailQueueConfig, NodemailerConnection, SendGridConnection, SESConnection, ResendConnection, } from './types.js';
2
+ export { MailManager } from './mail-manager.js';
3
+ export { TemplateEngineManager } from './template-engine.js';
4
+ export { BaseMailAdapter } from './mail-adapter.js';
5
+ export { ConsoleAdapter, NodemailerAdapter, SendGridAdapter, SESAdapter, ResendAdapter, } from './adapters/index.js';
@@ -0,0 +1,8 @@
1
+ // Mail System - Public API
2
+ // ESM-first module
3
+ export { MailManager } from './mail-manager.js';
4
+ export { TemplateEngineManager } from './template-engine.js';
5
+ export { BaseMailAdapter } from './mail-adapter.js';
6
+ // Export adapters
7
+ export { ConsoleAdapter, NodemailerAdapter, SendGridAdapter, SESAdapter, ResendAdapter, } from './adapters/index.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/mail/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,mBAAmB;AAmBnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,GACd,MAAM,qBAAqB,CAAC"}