@morojs/moro 1.6.8 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) 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 +338 -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 +936 -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 +154 -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 +419 -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/utilities/index.d.ts +2 -0
  280. package/dist/core/utilities/index.js +2 -0
  281. package/dist/core/utilities/index.js.map +1 -1
  282. package/dist/core/utilities/response-helpers.d.ts +280 -0
  283. package/dist/core/utilities/response-helpers.js +359 -0
  284. package/dist/core/utilities/response-helpers.js.map +1 -0
  285. package/dist/core/workers/facade.d.ts +74 -0
  286. package/dist/core/workers/facade.js +98 -0
  287. package/dist/core/workers/facade.js.map +1 -0
  288. package/dist/core/workers/index.d.ts +2 -0
  289. package/dist/core/workers/index.js +6 -0
  290. package/dist/core/workers/index.js.map +1 -0
  291. package/dist/core/workers/worker-manager.d.ts +124 -0
  292. package/dist/core/workers/worker-manager.js +299 -0
  293. package/dist/core/workers/worker-manager.js.map +1 -0
  294. package/dist/core/workers/worker.d.ts +1 -0
  295. package/dist/core/workers/worker.js +225 -0
  296. package/dist/core/workers/worker.js.map +1 -0
  297. package/dist/index.d.ts +10 -2
  298. package/dist/index.js +9 -2
  299. package/dist/index.js.map +1 -1
  300. package/dist/moro.d.ts +345 -13
  301. package/dist/moro.js +820 -221
  302. package/dist/moro.js.map +1 -1
  303. package/dist/types/cache.d.ts +4 -0
  304. package/dist/types/config.d.ts +42 -0
  305. package/dist/types/core.d.ts +18 -1
  306. package/dist/types/http.d.ts +21 -0
  307. package/package.json +98 -24
@@ -0,0 +1,188 @@
1
+ // Nodemailer Adapter - SMTP Email Adapter
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
+ * Nodemailer adapter for SMTP email sending
8
+ * Supports Gmail, Outlook, custom SMTP servers
9
+ */
10
+ export class NodemailerAdapter extends BaseMailAdapter {
11
+ transporter;
12
+ logger;
13
+ constructor() {
14
+ super();
15
+ this.logger = createFrameworkLogger('Mail:Nodemailer');
16
+ }
17
+ async initialize(config) {
18
+ if (!isPackageAvailable('nodemailer')) {
19
+ throw new Error('Nodemailer is not installed.\n' +
20
+ 'Install it with: npm install nodemailer\n' +
21
+ 'Or use a different mail adapter.');
22
+ }
23
+ const nodemailerPath = resolveUserPackage('nodemailer');
24
+ const nodemailer = await import(nodemailerPath);
25
+ this.transporter = nodemailer.default.createTransport(config);
26
+ await super.initialize(config);
27
+ this.logger.info('Nodemailer adapter initialized', 'Mail');
28
+ }
29
+ async send(options) {
30
+ this.ensureInitialized();
31
+ if (!this.transporter) {
32
+ throw new Error('Nodemailer transporter not initialized');
33
+ }
34
+ try {
35
+ const mailOptions = {
36
+ from: this.formatAddress(options.from),
37
+ to: this.formatAddresses(options.to),
38
+ subject: options.subject,
39
+ text: options.text,
40
+ html: options.html,
41
+ };
42
+ if (options.cc) {
43
+ mailOptions.cc = this.formatAddresses(options.cc);
44
+ }
45
+ if (options.bcc) {
46
+ mailOptions.bcc = this.formatAddresses(options.bcc);
47
+ }
48
+ if (options.replyTo) {
49
+ mailOptions.replyTo = this.formatAddress(options.replyTo);
50
+ }
51
+ if (options.sender) {
52
+ mailOptions.sender = this.formatAddress(options.sender);
53
+ }
54
+ if (options.attachments) {
55
+ mailOptions.attachments = options.attachments.map(att => ({
56
+ filename: att.filename,
57
+ content: att.content,
58
+ encoding: att.encoding,
59
+ contentType: att.contentType,
60
+ cid: att.cid,
61
+ }));
62
+ }
63
+ // Build headers object with compliance fields
64
+ const headers = { ...options.headers };
65
+ if (options.messageId) {
66
+ headers['Message-ID'] = options.messageId;
67
+ }
68
+ if (options.references) {
69
+ headers['References'] = Array.isArray(options.references)
70
+ ? options.references.join(' ')
71
+ : options.references;
72
+ }
73
+ if (options.inReplyTo) {
74
+ headers['In-Reply-To'] = options.inReplyTo;
75
+ }
76
+ // List management headers (RFC 2369)
77
+ if (options.listUnsubscribe) {
78
+ headers['List-Unsubscribe'] = Array.isArray(options.listUnsubscribe)
79
+ ? `<${options.listUnsubscribe.join('>, <')}>`
80
+ : `<${options.listUnsubscribe}>`;
81
+ }
82
+ if (options.listUnsubscribePost) {
83
+ headers['List-Unsubscribe-Post'] = options.listUnsubscribePost;
84
+ }
85
+ if (options.listId) {
86
+ headers['List-ID'] = options.listId;
87
+ }
88
+ if (options.listHelp) {
89
+ headers['List-Help'] = `<${options.listHelp}>`;
90
+ }
91
+ if (options.listSubscribe) {
92
+ headers['List-Subscribe'] = `<${options.listSubscribe}>`;
93
+ }
94
+ if (options.listOwner) {
95
+ headers['List-Owner'] = `<${options.listOwner}>`;
96
+ }
97
+ if (options.listArchive) {
98
+ headers['List-Archive'] = `<${options.listArchive}>`;
99
+ }
100
+ if (Object.keys(headers).length > 0) {
101
+ mailOptions.headers = headers;
102
+ }
103
+ if (options.priority) {
104
+ mailOptions.priority = options.priority;
105
+ }
106
+ if (options.returnPath) {
107
+ mailOptions.envelope = {
108
+ from: options.returnPath,
109
+ to: this.formatAddresses(options.to),
110
+ };
111
+ }
112
+ if (options.encoding) {
113
+ mailOptions.encoding = options.encoding;
114
+ }
115
+ if (options.textEncoding) {
116
+ mailOptions.textEncoding = options.textEncoding;
117
+ }
118
+ if (options.date) {
119
+ mailOptions.date = options.date;
120
+ }
121
+ if (options.dsn) {
122
+ mailOptions.dsn = options.dsn;
123
+ }
124
+ const info = await this.transporter.sendMail(mailOptions);
125
+ return {
126
+ success: true,
127
+ messageId: info.messageId,
128
+ accepted: info.accepted,
129
+ rejected: info.rejected,
130
+ response: info.response,
131
+ };
132
+ }
133
+ catch (error) {
134
+ this.logger.error('Failed to send email via Nodemailer', 'Mail', { error });
135
+ return {
136
+ success: false,
137
+ error: error instanceof Error ? error.message : String(error),
138
+ };
139
+ }
140
+ }
141
+ getName() {
142
+ return 'Nodemailer';
143
+ }
144
+ async verify() {
145
+ if (!this.transporter) {
146
+ return false;
147
+ }
148
+ try {
149
+ await this.transporter.verify();
150
+ return true;
151
+ }
152
+ catch (error) {
153
+ this.logger.error('Nodemailer verification failed', 'Mail', { error });
154
+ return false;
155
+ }
156
+ }
157
+ async close() {
158
+ if (this.transporter) {
159
+ this.transporter.close();
160
+ }
161
+ await super.close();
162
+ }
163
+ formatAddress(address) {
164
+ if (!address) {
165
+ return '';
166
+ }
167
+ if (typeof address === 'string') {
168
+ return address;
169
+ }
170
+ if (address.name) {
171
+ return `"${address.name}" <${address.email}>`;
172
+ }
173
+ return address.email;
174
+ }
175
+ formatAddresses(addresses) {
176
+ if (!addresses) {
177
+ return '';
178
+ }
179
+ if (typeof addresses === 'string') {
180
+ return addresses;
181
+ }
182
+ if (Array.isArray(addresses)) {
183
+ return addresses.map(addr => this.formatAddress(addr)).join(', ');
184
+ }
185
+ return this.formatAddress(addresses);
186
+ }
187
+ }
188
+ //# sourceMappingURL=nodemailer-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodemailer-adapter.js","sourceRoot":"","sources":["../../../../src/core/mail/adapters/nodemailer-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseMailAdapter } from '../mail-adapter.js';
2
+ import type { MailOptions, MailResult, ResendConnection } from '../types.js';
3
+ /**
4
+ * Resend adapter for email sending
5
+ * Supports Resend's modern email API
6
+ */
7
+ export declare class ResendAdapter extends BaseMailAdapter {
8
+ private client;
9
+ private logger;
10
+ constructor();
11
+ initialize(config: ResendConnection): Promise<void>;
12
+ send(options: MailOptions): Promise<MailResult>;
13
+ sendBulk(options: MailOptions[]): Promise<MailResult[]>;
14
+ getName(): string;
15
+ verify(): Promise<boolean>;
16
+ private formatAddress;
17
+ private formatAddressesArray;
18
+ }
@@ -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
+ }