@nocobase/plugin-workflow-mailer 2.3.0-beta.13 → 2.3.0-beta.14

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 (173) hide show
  1. package/dist/externalVersion.js +6 -6
  2. package/dist/node_modules/joi/package.json +1 -1
  3. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.d.ts +59 -0
  4. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.js +790 -0
  5. package/dist/node_modules/nodemailer/dist/cjs/base64/index.d.ts +36 -0
  6. package/dist/node_modules/nodemailer/dist/cjs/base64/index.js +119 -0
  7. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.d.ts +52 -0
  8. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.js +228 -0
  9. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.d.ts +48 -0
  10. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.js +180 -0
  11. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.d.ts +36 -0
  12. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.js +148 -0
  13. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.d.ts +52 -0
  14. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.js +165 -0
  15. package/dist/node_modules/nodemailer/dist/cjs/errors.d.ts +96 -0
  16. package/dist/node_modules/nodemailer/dist/cjs/errors.js +70 -0
  17. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.d.ts +107 -0
  18. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.js +282 -0
  19. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.d.ts +65 -0
  20. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.js +384 -0
  21. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.d.ts +64 -0
  22. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.js +99 -0
  23. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.d.ts +174 -0
  24. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.js +613 -0
  25. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.d.ts +237 -0
  26. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.js +415 -0
  27. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.d.ts +97 -0
  28. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.js +342 -0
  29. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.d.ts +161 -0
  30. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.js +787 -0
  31. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.d.ts +2 -0
  32. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.js +2103 -0
  33. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.d.ts +333 -0
  34. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.js +1493 -0
  35. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.d.ts +5 -0
  36. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.js +32 -0
  37. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.d.ts +9 -0
  38. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.js +40 -0
  39. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.d.ts +10 -0
  40. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.js +47 -0
  41. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.d.ts +124 -0
  42. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.js +1 -0
  43. package/dist/node_modules/nodemailer/dist/cjs/package-info.d.ts +3 -0
  44. package/dist/node_modules/nodemailer/dist/cjs/package-info.js +7 -0
  45. package/dist/node_modules/nodemailer/dist/cjs/package.json +3 -0
  46. package/dist/node_modules/nodemailer/dist/cjs/punycode/index.d.ts +73 -0
  47. package/dist/node_modules/nodemailer/{lib → dist/cjs}/punycode/index.js +62 -111
  48. package/dist/node_modules/nodemailer/dist/cjs/qp/index.d.ts +32 -0
  49. package/dist/node_modules/nodemailer/dist/cjs/qp/index.js +207 -0
  50. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.d.ts +69 -0
  51. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.js +210 -0
  52. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.d.ts +112 -0
  53. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.js +252 -0
  54. package/dist/node_modules/nodemailer/dist/cjs/shared/index.d.ts +260 -0
  55. package/dist/node_modules/nodemailer/dist/cjs/shared/index.js +680 -0
  56. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.d.ts +23 -0
  57. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.js +43 -0
  58. package/dist/node_modules/nodemailer/dist/cjs/shared/url.d.ts +21 -0
  59. package/dist/node_modules/nodemailer/dist/cjs/shared/url.js +255 -0
  60. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.d.ts +15 -0
  61. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.js +108 -0
  62. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.d.ts +47 -0
  63. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.js +189 -0
  64. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.d.ts +416 -0
  65. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.js +1837 -0
  66. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.d.ts +133 -0
  67. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.js +569 -0
  68. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.d.ts +62 -0
  69. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.js +257 -0
  70. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.d.ts +156 -0
  71. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.js +371 -0
  72. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.d.ts +65 -0
  73. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.js +146 -0
  74. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.d.ts +35 -0
  75. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.js +41 -0
  76. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.d.ts +2 -0
  77. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.js +674 -0
  78. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.d.ts +201 -0
  79. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.js +426 -0
  80. package/dist/node_modules/nodemailer/dist/esm/addressparser/index.d.ts +59 -0
  81. package/dist/node_modules/nodemailer/{lib → dist/esm}/addressparser/index.js +361 -131
  82. package/dist/node_modules/nodemailer/dist/esm/base64/index.d.ts +36 -0
  83. package/dist/node_modules/nodemailer/{lib → dist/esm}/base64/index.js +31 -56
  84. package/dist/node_modules/nodemailer/dist/esm/dkim/index.d.ts +52 -0
  85. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/index.js +49 -78
  86. package/dist/node_modules/nodemailer/dist/esm/dkim/message-parser.d.ts +48 -0
  87. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/message-parser.js +64 -42
  88. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.d.ts +36 -0
  89. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.js +141 -0
  90. package/dist/node_modules/nodemailer/dist/esm/dkim/sign.d.ts +52 -0
  91. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/sign.js +50 -46
  92. package/dist/node_modules/nodemailer/dist/esm/errors.d.ts +96 -0
  93. package/dist/node_modules/nodemailer/{lib → dist/esm}/errors.js +26 -18
  94. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.d.ts +107 -0
  95. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.js +242 -0
  96. package/dist/node_modules/nodemailer/dist/esm/fetch/index.d.ts +65 -0
  97. package/dist/node_modules/nodemailer/{lib → dist/esm}/fetch/index.js +80 -147
  98. package/dist/node_modules/nodemailer/dist/esm/json-transport/index.d.ts +64 -0
  99. package/dist/node_modules/nodemailer/{lib → dist/esm}/json-transport/index.js +19 -39
  100. package/dist/node_modules/nodemailer/dist/esm/mail-composer/index.d.ts +174 -0
  101. package/dist/node_modules/nodemailer/{lib → dist/esm}/mail-composer/index.js +199 -265
  102. package/dist/node_modules/nodemailer/dist/esm/mailer/index.d.ts +237 -0
  103. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/index.js +128 -234
  104. package/dist/node_modules/nodemailer/dist/esm/mailer/mail-message.d.ts +97 -0
  105. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/mail-message.js +62 -114
  106. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.d.ts +161 -0
  107. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.js +738 -0
  108. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/mime-types.d.ts +2 -0
  109. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-funcs/mime-types.js +29 -42
  110. package/dist/node_modules/nodemailer/dist/esm/mime-node/index.d.ts +333 -0
  111. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/index.js +259 -372
  112. package/dist/node_modules/nodemailer/dist/esm/mime-node/last-newline.d.ts +5 -0
  113. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/last-newline.js +4 -10
  114. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-unix.d.ts +9 -0
  115. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-unix.js +6 -11
  116. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-windows.d.ts +10 -0
  117. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-windows.js +6 -13
  118. package/dist/node_modules/nodemailer/dist/esm/nodemailer.d.ts +124 -0
  119. package/dist/node_modules/nodemailer/dist/esm/nodemailer.js +166 -0
  120. package/dist/node_modules/nodemailer/dist/esm/package-info.d.ts +3 -0
  121. package/dist/node_modules/nodemailer/dist/esm/package-info.js +4 -0
  122. package/dist/node_modules/nodemailer/dist/esm/package.json +3 -0
  123. package/dist/node_modules/nodemailer/dist/esm/punycode/index.d.ts +73 -0
  124. package/dist/node_modules/nodemailer/dist/esm/punycode/index.js +405 -0
  125. package/dist/node_modules/nodemailer/dist/esm/qp/index.d.ts +32 -0
  126. package/dist/node_modules/nodemailer/{lib → dist/esm}/qp/index.js +38 -67
  127. package/dist/node_modules/nodemailer/dist/esm/sendmail-transport/index.d.ts +69 -0
  128. package/dist/node_modules/nodemailer/{lib → dist/esm}/sendmail-transport/index.js +51 -101
  129. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.d.ts +112 -0
  130. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.js +212 -0
  131. package/dist/node_modules/nodemailer/dist/esm/shared/index.d.ts +260 -0
  132. package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/index.js +156 -272
  133. package/dist/node_modules/nodemailer/dist/esm/shared/objects.d.ts +23 -0
  134. package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/objects.js +13 -17
  135. package/dist/node_modules/nodemailer/dist/esm/shared/url.d.ts +21 -0
  136. package/dist/node_modules/nodemailer/dist/esm/shared/url.js +214 -0
  137. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.d.ts +15 -0
  138. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.js +103 -0
  139. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/http-proxy-client.d.ts +47 -0
  140. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/http-proxy-client.js +49 -74
  141. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/index.d.ts +416 -0
  142. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/index.js +574 -794
  143. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/index.d.ts +133 -0
  144. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/index.js +172 -284
  145. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/pool-resource.d.ts +62 -0
  146. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/pool-resource.js +57 -97
  147. package/dist/node_modules/nodemailer/dist/esm/smtp-transport/index.d.ts +156 -0
  148. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-transport/index.js +81 -179
  149. package/dist/node_modules/nodemailer/dist/esm/stream-transport/index.d.ts +65 -0
  150. package/dist/node_modules/nodemailer/{lib → dist/esm}/stream-transport/index.js +36 -74
  151. package/dist/node_modules/nodemailer/dist/esm/well-known/index.d.ts +35 -0
  152. package/dist/node_modules/nodemailer/{lib → dist/esm}/well-known/index.js +5 -16
  153. package/dist/node_modules/nodemailer/dist/esm/well-known/services.d.ts +2 -0
  154. package/dist/node_modules/nodemailer/dist/esm/well-known/services.js +671 -0
  155. package/dist/node_modules/nodemailer/dist/esm/xoauth2/index.d.ts +201 -0
  156. package/dist/node_modules/nodemailer/{lib → dist/esm}/xoauth2/index.js +125 -187
  157. package/dist/node_modules/nodemailer/{lib → dist}/well-known/services.json +9 -2
  158. package/dist/node_modules/nodemailer/package.json +1 -1
  159. package/package.json +3 -3
  160. package/dist/node_modules/nodemailer/.gitattributes +0 -6
  161. package/dist/node_modules/nodemailer/.ncurc.js +0 -9
  162. package/dist/node_modules/nodemailer/.prettierignore +0 -8
  163. package/dist/node_modules/nodemailer/.prettierrc +0 -12
  164. package/dist/node_modules/nodemailer/.prettierrc.js +0 -10
  165. package/dist/node_modules/nodemailer/.release-please-config.json +0 -9
  166. package/dist/node_modules/nodemailer/eslint.config.js +0 -88
  167. package/dist/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
  168. package/dist/node_modules/nodemailer/lib/fetch/cookies.js +0 -276
  169. package/dist/node_modules/nodemailer/lib/mime-funcs/index.js +0 -671
  170. package/dist/node_modules/nodemailer/lib/nodemailer.js +0 -1
  171. package/dist/node_modules/nodemailer/lib/ses-transport/index.js +0 -266
  172. package/dist/node_modules/nodemailer/lib/shared/url.js +0 -151
  173. package/dist/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -105
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_events_1 = __importDefault(require("node:events"));
40
+ const packageData = __importStar(require("../package-info.js"));
41
+ const shared = __importStar(require("../shared/index.js"));
42
+ const errors = __importStar(require("../errors.js"));
43
+ const le_windows_js_1 = __importDefault(require("../mime-node/le-windows.js"));
44
+ const index_js_1 = __importDefault(require("../mime-node/index.js"));
45
+ /**
46
+ * Tags AWS SDK rejections that carry no `code` property (SDK v3 errors only
47
+ * have a `name`) with the generic SES transport error code, keeping the
48
+ * original error object intact
49
+ */
50
+ function tagSesError(err) {
51
+ if (err && typeof err === 'object' && !err.code) {
52
+ err.code = errors.ESES;
53
+ }
54
+ return err;
55
+ }
56
+ /**
57
+ * Generates a Transport object for AWS SES
58
+ *
59
+ * @constructor
60
+ * @param optional config parameter
61
+ */
62
+ class SESTransport extends node_events_1.default {
63
+ constructor(options) {
64
+ super();
65
+ if (!options || !options.SES || !options.SES.sesClient) {
66
+ const error = new Error('Missing SES configuration, expecting { sesClient, SendEmailCommand } from @aws-sdk/client-sesv2, see https://nodemailer.com/transports/ses/');
67
+ error.code = errors.ECONFIG;
68
+ throw error;
69
+ }
70
+ this.options = options;
71
+ this.ses = this.options.SES;
72
+ this.name = 'SESTransport';
73
+ this.version = packageData.version;
74
+ this.logger = shared.getLogger(this.options, {
75
+ component: this.options.component || 'ses-transport'
76
+ });
77
+ }
78
+ getRegion(cb) {
79
+ if (this.ses.sesClient.config && typeof this.ses.sesClient.config.region === 'function') {
80
+ // Resolve the region provider. Use the two-argument form of then() so that a
81
+ // synchronous throw from cb is not recaught here and used to invoke cb a second time.
82
+ this.ses.sesClient.config.region().then(region => cb(null, region), err => cb(err));
83
+ return;
84
+ }
85
+ return cb(null, false);
86
+ }
87
+ /**
88
+ * Compiles a mailcomposer message and forwards it to SES
89
+ *
90
+ * @param mail MailComposer object
91
+ * @param callback Callback function to run when the sending is completed
92
+ */
93
+ send(mail, callback) {
94
+ // send() runs after the message was compiled, so mail.message is set
95
+ let fromHeader = mail.message._headers.find(header => /^from$/i.test(header.key));
96
+ if (fromHeader) {
97
+ const mimeNode = new index_js_1.default('text/plain');
98
+ fromHeader = mimeNode._convertAddresses(mimeNode._parseAddresses(fromHeader.value));
99
+ }
100
+ const envelope = mail.message.getEnvelope();
101
+ const messageId = mail.message.messageId();
102
+ const recipients = [].concat(envelope.to || []);
103
+ if (recipients.length > 3) {
104
+ recipients.push('...and ' + recipients.splice(2).length + ' more');
105
+ }
106
+ this.logger.info({
107
+ tnx: 'send',
108
+ messageId
109
+ }, 'Sending message %s to <%s>', messageId, recipients.join(', '));
110
+ const getRawMessage = (next) => {
111
+ // do not use Message-ID and Date in DKIM signature
112
+ if (!mail.data._dkim) {
113
+ mail.data._dkim = {};
114
+ }
115
+ if (mail.data._dkim.skipFields && typeof mail.data._dkim.skipFields === 'string') {
116
+ mail.data._dkim.skipFields += ':date:message-id';
117
+ }
118
+ else {
119
+ mail.data._dkim.skipFields = 'date:message-id';
120
+ }
121
+ const sourceStream = mail.message.createReadStream();
122
+ const stream = sourceStream.pipe(new le_windows_js_1.default());
123
+ const chunks = [];
124
+ let chunklen = 0;
125
+ stream.on('readable', () => {
126
+ let chunk;
127
+ while ((chunk = stream.read()) !== null) {
128
+ chunks.push(chunk);
129
+ chunklen += chunk.length;
130
+ }
131
+ });
132
+ sourceStream.once('error', err => stream.emit('error', err));
133
+ stream.once('error', err => next(err));
134
+ stream.once('end', () => next(null, Buffer.concat(chunks, chunklen)));
135
+ };
136
+ setImmediate(() => getRawMessage((err, raw) => {
137
+ if (err) {
138
+ this.logger.error({
139
+ err,
140
+ tnx: 'send',
141
+ messageId
142
+ }, 'Failed creating message for %s. %s', messageId, err.message);
143
+ return callback(err);
144
+ }
145
+ // mail.data.ses is caller supplied message data, so copy its own keys only
146
+ const sesMessage = shared.copyOwnKeys({
147
+ Content: {
148
+ Raw: {
149
+ // required
150
+ Data: raw // required
151
+ }
152
+ },
153
+ FromEmailAddress: fromHeader || envelope.from,
154
+ Destination: {
155
+ ToAddresses: envelope.to
156
+ }
157
+ }, mail.data.ses);
158
+ this.getRegion((err, region) => {
159
+ if (err || !region) {
160
+ region = 'us-east-1';
161
+ }
162
+ let sendPromise;
163
+ try {
164
+ // command construction or dispatch can throw synchronously on a
165
+ // misconfigured SDK; surface it as a single error callback instead
166
+ // of letting it escape into getRegion's promise chain
167
+ const command = new this.ses.SendEmailCommand(sesMessage);
168
+ sendPromise = this.ses.sesClient.send(command);
169
+ }
170
+ catch (err) {
171
+ tagSesError(err);
172
+ this.logger.error({
173
+ err,
174
+ tnx: 'send'
175
+ }, 'Send error for %s: %s', messageId, err.message);
176
+ setImmediate(() => callback(err));
177
+ return;
178
+ }
179
+ sendPromise
180
+ .then(data => {
181
+ if (region === 'us-east-1') {
182
+ region = 'email';
183
+ }
184
+ const info = {
185
+ envelope: {
186
+ from: envelope.from,
187
+ to: envelope.to
188
+ },
189
+ messageId: '<' + data.MessageId + (!/@/.test(data.MessageId) ? '@' + region + '.amazonses.com' : '') + '>',
190
+ response: data.MessageId,
191
+ raw: raw
192
+ };
193
+ // invoke the callback outside the promise chain so a throw from it
194
+ // is not recaught by .catch() and used to call it a second time
195
+ setImmediate(() => callback(null, info));
196
+ })
197
+ .catch(err => {
198
+ tagSesError(err);
199
+ this.logger.error({
200
+ err,
201
+ tnx: 'send'
202
+ }, 'Send error for %s: %s', messageId, err.message);
203
+ setImmediate(() => callback(err));
204
+ });
205
+ });
206
+ }));
207
+ }
208
+ verify(callback) {
209
+ let promise;
210
+ if (!callback) {
211
+ promise = new Promise((resolve, reject) => {
212
+ callback = shared.callbackPromise(resolve, reject);
213
+ });
214
+ }
215
+ const done = callback;
216
+ const cb = (err) => {
217
+ if (err && !['InvalidParameterValue', 'MessageRejected'].includes(err.code || err.Code || err.name)) {
218
+ return done(tagSesError(err));
219
+ }
220
+ return done(null, true);
221
+ };
222
+ const sesMessage = {
223
+ Content: {
224
+ Raw: {
225
+ Data: Buffer.from('From: <invalid@invalid>\r\nTo: <invalid@invalid>\r\n Subject: Invalid\r\n\r\nInvalid')
226
+ }
227
+ },
228
+ FromEmailAddress: 'invalid@invalid',
229
+ Destination: {
230
+ ToAddresses: ['invalid@invalid']
231
+ }
232
+ };
233
+ // the region value is not used for anything when verifying, but the lookup
234
+ // exercises the client configuration the same way as send() does
235
+ this.getRegion(() => {
236
+ let sendPromise;
237
+ try {
238
+ const command = new this.ses.SendEmailCommand(sesMessage);
239
+ sendPromise = this.ses.sesClient.send(command);
240
+ }
241
+ catch (err) {
242
+ setImmediate(() => cb(err));
243
+ return;
244
+ }
245
+ sendPromise.then(() => setImmediate(() => cb(null))).catch(err => setImmediate(() => cb(err)));
246
+ });
247
+ return promise;
248
+ }
249
+ }
250
+ exports.default = SESTransport;
251
+ module.exports = exports.default;
252
+ Object.defineProperty(module.exports, 'default', { value: exports.default, enumerable: false, writable: true, configurable: true });
@@ -0,0 +1,260 @@
1
+ import { isProtoKey, copyOwnKeys } from './objects.js';
2
+ import os from 'node:os';
3
+ import type { Readable } from 'node:stream';
4
+ import type { OutgoingHttpHeaders } from 'node:http';
5
+ export { isProtoKey, copyOwnKeys };
6
+ /**
7
+ * Options for resolveHostname. The object is also handed to dns.Resolver, so its
8
+ * `timeout` and `tries` settings apply to the lookups
9
+ */
10
+ export interface ResolveHostnameOptions {
11
+ /** Hostname or IP address to resolve */
12
+ host?: string | undefined;
13
+ /** Server name for TLS, used as the host when no host is set */
14
+ servername?: string | undefined;
15
+ /** Count loopback interfaces when checking which address families are usable */
16
+ allowInternalNetworkInterfaces?: boolean | undefined;
17
+ /** How long a resolved value stays cached, in milliseconds (default 5 minutes) */
18
+ dnsTtl?: number | undefined;
19
+ /** Query timeout in milliseconds, passed to dns.Resolver */
20
+ timeout?: number | undefined;
21
+ /** Number of query attempts, passed to dns.Resolver */
22
+ tries?: number | undefined;
23
+ }
24
+ /**
25
+ * Resolved value handed to the resolveHostname callback
26
+ */
27
+ export interface ResolvedHostname {
28
+ /** Server name to use for TLS, false when an IP literal was given without one */
29
+ servername?: string | false | undefined;
30
+ /** Address to connect to, picked at random from the resolved addresses */
31
+ host?: string | null | undefined;
32
+ /** Whether the value came from the DNS cache */
33
+ cached?: boolean | undefined;
34
+ /** The resolver error when a cached value was used because of it */
35
+ error?: Error | undefined;
36
+ }
37
+ /** The name @types/nodemailer used for ResolvedHostname */
38
+ export type ResolveHostnameValue = ResolvedHostname;
39
+ /**
40
+ * Resolved addresses as stored in the DNS cache
41
+ */
42
+ export interface DnsCacheValue {
43
+ addresses: string[];
44
+ }
45
+ /**
46
+ * A DNS cache entry
47
+ */
48
+ export interface DnsCacheEntry {
49
+ value: DnsCacheValue;
50
+ /** Expiration time as a timestamp, entries without one never expire */
51
+ expires?: number | undefined;
52
+ }
53
+ /**
54
+ * Configuration object parsed from a connection url. Query parameters become
55
+ * top level keys, `tls.*` parameters go into `tls`
56
+ */
57
+ export interface ConnectionUrlOptions {
58
+ secure?: boolean | undefined;
59
+ direct?: boolean | undefined;
60
+ port?: number | undefined;
61
+ host?: string | undefined;
62
+ /** Well-known service name from the ?service= query parameter */
63
+ service?: string | undefined;
64
+ auth?: {
65
+ user: string;
66
+ pass: string;
67
+ } | undefined;
68
+ tls?: {
69
+ [key: string]: unknown;
70
+ } | undefined;
71
+ [key: string]: unknown;
72
+ }
73
+ /**
74
+ * Structured data attached to a log line. tnx, sid and cid drive the line prefix
75
+ * of the default console logger
76
+ */
77
+ export interface LogEntry {
78
+ /** 'server' or 'client' for SMTP transaction lines */
79
+ tnx?: string | undefined;
80
+ /** Session id */
81
+ sid?: string | undefined;
82
+ /** Connection id */
83
+ cid?: string | number | undefined;
84
+ level?: string | undefined;
85
+ [key: string]: any;
86
+ }
87
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
88
+ /** The name @types/nodemailer used for LogLevel */
89
+ export type LoggerLevel = LogLevel;
90
+ /**
91
+ * A logger supplied by the caller, bunyan style. Any object works, a level it does not
92
+ * implement is routed to one it does, see _logFunc
93
+ */
94
+ export interface ExternalLogger {
95
+ trace?(...args: any[]): any;
96
+ debug?(...args: any[]): any;
97
+ info?(...args: any[]): any;
98
+ warn?(...args: any[]): any;
99
+ error?(...args: any[]): any;
100
+ fatal?(...args: any[]): any;
101
+ log?(...args: any[]): any;
102
+ [level: string]: any;
103
+ }
104
+ /**
105
+ * Options for getLogger
106
+ */
107
+ export interface GetLoggerOptions {
108
+ /** A bunyan compatible logger, true for the default console logger, false or unset for no logging */
109
+ logger?: ExternalLogger | boolean | undefined;
110
+ }
111
+ /**
112
+ * A bunyan style log method: a data object followed by a printf style message, or the
113
+ * message alone
114
+ */
115
+ export interface LogMethod {
116
+ (data: LogEntry | undefined, message?: string, ...args: any[]): void;
117
+ (message?: string, ...args: any[]): void;
118
+ }
119
+ /**
120
+ * The bunyan compatible logger interface returned by getLogger
121
+ */
122
+ export interface Logger {
123
+ trace: LogMethod;
124
+ debug: LogMethod;
125
+ info: LogMethod;
126
+ warn: LogMethod;
127
+ error: LogMethod;
128
+ fatal: LogMethod;
129
+ }
130
+ /**
131
+ * A parsed data URI
132
+ */
133
+ export interface ParsedDataURI {
134
+ /** Decoded payload */
135
+ data: Buffer;
136
+ /** 'base64', 'utf8' or 'utf-8' when the URI declared one, null otherwise */
137
+ encoding: string | null;
138
+ contentType: string;
139
+ /** Further `key=value` parameters from the metadata section */
140
+ params: {
141
+ [key: string]: string;
142
+ };
143
+ }
144
+ /**
145
+ * Access policy for resolveContent
146
+ */
147
+ export interface ResolveContentOptions {
148
+ /** Reject content that points to a file path */
149
+ disableFileAccess?: boolean | undefined;
150
+ /** Reject content that points to a URL */
151
+ disableUrlAccess?: boolean | undefined;
152
+ }
153
+ /**
154
+ * An object value resolveContent understands. A plain string or Buffer value is returned as
155
+ * is and a readable stream is read into a Buffer, an object carries the content in `content`
156
+ * or points to it with `path` or `href`
157
+ */
158
+ export interface ContentDescriptor {
159
+ /** The content itself, a string, a Buffer or a readable stream */
160
+ content?: string | Buffer | Readable | undefined;
161
+ /** Encoding of a string `content`, it is decoded into a Buffer unless it is utf8 or ascii */
162
+ encoding?: string | undefined;
163
+ /** File path, http(s) URL or data URI to read the content from */
164
+ path?: string | undefined;
165
+ /** URL to fetch the content from */
166
+ href?: string | undefined;
167
+ /** Request headers for a URL fetch */
168
+ httpHeaders?: OutgoingHttpHeaders | undefined;
169
+ /** TLS settings for a URL fetch, see nmfetch */
170
+ tls?: {
171
+ [key: string]: any;
172
+ } | undefined;
173
+ }
174
+ export type ResolveContentCallback = (err: Error | null, value?: any) => void;
175
+ export declare let networkInterfaces: NodeJS.Dict<os.NetworkInterfaceInfo[]> | undefined;
176
+ export declare const dnsCache: Map<string, DnsCacheEntry>;
177
+ export declare const resolveHostname: (options: ResolveHostnameOptions | undefined, callback: (err: Error | null, result?: ResolvedHostname) => void) => void;
178
+ /**
179
+ * Parses connection url to a structured configuration object
180
+ *
181
+ * @param str Connection url
182
+ * @return Configuration object
183
+ */
184
+ export declare const parseConnectionUrl: (str?: string | null) => ConnectionUrlOptions;
185
+ /**
186
+ * Returns a bunyan-compatible logger interface. Uses either provided logger or
187
+ * creates a default console logger
188
+ *
189
+ * @param [options] Options object that might include 'logger' value
190
+ * @param [defaults] Fields merged into every log entry, overridden by the fields of the entry itself
191
+ * @return bunyan compatible logger
192
+ */
193
+ export declare const getLogger: (options?: GetLoggerOptions, defaults?: LogEntry) => Logger;
194
+ /**
195
+ * Wrapper for creating a callback that either resolves or rejects a promise
196
+ * based on input
197
+ *
198
+ * @param resolve Function to run if callback is called
199
+ * @param reject Function to run if callback ends with an error
200
+ */
201
+ export declare const callbackPromise: (resolve: (...args: any[]) => void, reject: (reason?: any) => void) => (...args: any[]) => void;
202
+ export declare const parseDataURI: (uri: unknown) => ParsedDataURI | null;
203
+ /**
204
+ * Resolves a String or a Buffer value for content value. Useful if the value
205
+ * is a Stream or a file or an URL. If the value is a Stream, overwrites
206
+ * the stream object with the resolved value (you can't stream a value twice).
207
+ *
208
+ * This is useful when you want to create a plugin that needs a content value,
209
+ * for example the `html` or `text` value as a String or a Buffer but not as
210
+ * a file path or an URL.
211
+ *
212
+ * @param data An object or an Array you want to resolve an element for, see ContentDescriptor for the values it understands
213
+ * @param key Property name or an Array index
214
+ * @param callback Callback function with (err, value)
215
+ */
216
+ export declare function resolveContent(data: {
217
+ [key: string]: any;
218
+ }, key: string | number, callback: ResolveContentCallback): void;
219
+ /**
220
+ * Resolves a String or a Buffer value for content value
221
+ *
222
+ * @param data An object or an Array you want to resolve an element for, see ContentDescriptor for the values it understands
223
+ * @param key Property name or an Array index
224
+ * @param options Access policy: { disableFileAccess, disableUrlAccess }
225
+ * @param callback Callback function with (err, value)
226
+ */
227
+ export declare function resolveContent(data: {
228
+ [key: string]: any;
229
+ }, key: string | number, options: ResolveContentOptions | false | undefined, callback: ResolveContentCallback): void;
230
+ /**
231
+ * Resolves a String or a Buffer value for content value
232
+ *
233
+ * @param data An object or an Array you want to resolve an element for, see ContentDescriptor for the values it understands
234
+ * @param key Property name or an Array index
235
+ * @param [options] Optional access policy: { disableFileAccess, disableUrlAccess }
236
+ * @returns Promise that resolves with the value
237
+ */
238
+ export declare function resolveContent(data: {
239
+ [key: string]: any;
240
+ }, key: string | number, options?: ResolveContentOptions | false): Promise<any>;
241
+ /**
242
+ * Resolves a String or a Buffer value for content value
243
+ *
244
+ * @param data An object or an Array you want to resolve an element for, see ContentDescriptor for the values it understands
245
+ * @param key Property name or an Array index
246
+ * @param options Access policy: { disableFileAccess, disableUrlAccess }
247
+ * @param callback Callback function with (err, value), a Promise is returned if not set
248
+ */
249
+ export declare function resolveContent(data: {
250
+ [key: string]: any;
251
+ }, key: string | number, options: ResolveContentOptions | false | undefined, callback: ResolveContentCallback | undefined): Promise<any> | void;
252
+ /**
253
+ * Copies properties from source objects to target objects
254
+ */
255
+ export declare const assign: (...args: ({
256
+ [key: string]: any;
257
+ } | false | null | undefined)[]) => {
258
+ [key: string]: any;
259
+ };
260
+ export declare const encodeXText: (str: string) => string;