velocious 1.0.183 → 1.0.185

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 (45) hide show
  1. package/README.md +87 -0
  2. package/build/src/background-jobs/job-registry.d.ts +9 -0
  3. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  4. package/build/src/background-jobs/job-registry.js +30 -12
  5. package/build/src/configuration-types.d.ts +18 -0
  6. package/build/src/configuration-types.d.ts.map +1 -1
  7. package/build/src/configuration-types.js +6 -1
  8. package/build/src/configuration.d.ts +11 -1
  9. package/build/src/configuration.d.ts.map +1 -1
  10. package/build/src/configuration.js +16 -2
  11. package/build/src/database/drivers/base.d.ts +2 -3
  12. package/build/src/database/drivers/base.d.ts.map +1 -1
  13. package/build/src/database/drivers/base.js +5 -4
  14. package/build/src/database/drivers/sqlite/base.d.ts +0 -7
  15. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  16. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  17. package/build/src/database/drivers/sqlite/index.js +22 -7
  18. package/build/src/database/query/insert-base.d.ts +5 -0
  19. package/build/src/database/query/insert-base.d.ts.map +1 -1
  20. package/build/src/database/query/insert-base.js +11 -2
  21. package/build/src/database/record/index.d.ts +66 -2
  22. package/build/src/database/record/index.d.ts.map +1 -1
  23. package/build/src/database/record/index.js +155 -4
  24. package/build/src/jobs/mail-delivery.d.ts +12 -0
  25. package/build/src/jobs/mail-delivery.d.ts.map +1 -0
  26. package/build/src/jobs/mail-delivery.js +19 -0
  27. package/build/src/mailer/backends/smtp.d.ts +25 -0
  28. package/build/src/mailer/backends/smtp.d.ts.map +1 -0
  29. package/build/src/mailer/backends/smtp.js +99 -0
  30. package/build/src/mailer/base.d.ts +105 -0
  31. package/build/src/mailer/base.d.ts.map +1 -0
  32. package/build/src/mailer/base.js +223 -0
  33. package/build/src/mailer/delivery.d.ts +35 -0
  34. package/build/src/mailer/delivery.d.ts.map +1 -0
  35. package/build/src/mailer/delivery.js +48 -0
  36. package/build/src/mailer/index.d.ts +17 -0
  37. package/build/src/mailer/index.d.ts.map +1 -0
  38. package/build/src/mailer/index.js +23 -0
  39. package/build/src/mailer.d.ts +16 -0
  40. package/build/src/mailer.d.ts.map +1 -0
  41. package/build/src/mailer.js +6 -0
  42. package/build/src/testing/test-runner.d.ts.map +1 -1
  43. package/build/src/testing/test-runner.js +3 -1
  44. package/build/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +5 -2
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Background job for delivering mailer payloads.
3
+ */
4
+ export default class MailDeliveryJob extends VelociousJob {
5
+ /**
6
+ * @param {import("../mailer.js").MailerDeliveryPayload} [payload] - Mail delivery payload.
7
+ * @returns {Promise<void>} - Resolves when complete.
8
+ */
9
+ perform(payload?: import("../mailer.js").MailerDeliveryPayload): Promise<void>;
10
+ }
11
+ import VelociousJob from "../background-jobs/job.js";
12
+ //# sourceMappingURL=mail-delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-delivery.d.ts","sourceRoot":"","sources":["../../../src/jobs/mail-delivery.js"],"names":[],"mappings":"AAKA;;GAEG;AACH;IACE;;;OAGG;IACH,kBAHW,OAAO,cAAc,EAAE,qBAAqB,GAC1C,OAAO,CAAC,IAAI,CAAC,CAQzB;CACF;yBAlBwB,2BAA2B"}
@@ -0,0 +1,19 @@
1
+ // @ts-check
2
+ import VelociousJob from "../background-jobs/job.js";
3
+ import velociousMailer from "../mailer.js";
4
+ /**
5
+ * Background job for delivering mailer payloads.
6
+ */
7
+ export default class MailDeliveryJob extends VelociousJob {
8
+ /**
9
+ * @param {import("../mailer.js").MailerDeliveryPayload} [payload] - Mail delivery payload.
10
+ * @returns {Promise<void>} - Resolves when complete.
11
+ */
12
+ async perform(payload) {
13
+ if (!payload) {
14
+ throw new Error(`Missing mail delivery payload. Got: ${String(payload)}`);
15
+ }
16
+ await velociousMailer.deliverPayload(payload);
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbC1kZWxpdmVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9qb2JzL21haWwtZGVsaXZlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8sZUFBZSxNQUFNLGNBQWMsQ0FBQTtBQUUxQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sZUFBZ0IsU0FBUSxZQUFZO0lBQ3ZEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTztRQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzNFLENBQUM7UUFFRCxNQUFNLGVBQWUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDL0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBWZWxvY2lvdXNKb2IgZnJvbSBcIi4uL2JhY2tncm91bmQtam9icy9qb2IuanNcIlxuaW1wb3J0IHZlbG9jaW91c01haWxlciBmcm9tIFwiLi4vbWFpbGVyLmpzXCJcblxuLyoqXG4gKiBCYWNrZ3JvdW5kIGpvYiBmb3IgZGVsaXZlcmluZyBtYWlsZXIgcGF5bG9hZHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxEZWxpdmVyeUpvYiBleHRlbmRzIFZlbG9jaW91c0pvYiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IFtwYXlsb2FkXSAtIE1haWwgZGVsaXZlcnkgcGF5bG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0ocGF5bG9hZCkge1xuICAgIGlmICghcGF5bG9hZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG1haWwgZGVsaXZlcnkgcGF5bG9hZC4gR290OiAke1N0cmluZyhwYXlsb2FkKX1gKVxuICAgIH1cblxuICAgIGF3YWl0IHZlbG9jaW91c01haWxlci5kZWxpdmVyUGF5bG9hZChwYXlsb2FkKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ /**
2
+ * SMTP mailer backend using smtp-connection.
3
+ */
4
+ export default class SmtpMailerBackend {
5
+ /**
6
+ * @param {object} args - Constructor args.
7
+ * @param {object} args.connectionOptions - smtp-connection options.
8
+ * @param {string} [args.defaultFrom] - Default from address.
9
+ */
10
+ constructor({ connectionOptions, defaultFrom, ...restArgs }: {
11
+ connectionOptions: object;
12
+ defaultFrom?: string;
13
+ });
14
+ connectionOptions: any;
15
+ defaultFrom: string;
16
+ /**
17
+ * @param {object} args - Delivery args.
18
+ * @param {import("../index.js").MailerDeliveryPayload} args.payload - Mail delivery payload.
19
+ * @returns {Promise<void>} - Resolves when complete.
20
+ */
21
+ deliver({ payload, ...restArgs }: {
22
+ payload: import("../index.js").MailerDeliveryPayload;
23
+ }): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=smtp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smtp.d.ts","sourceRoot":"","sources":["../../../../src/mailer/backends/smtp.js"],"names":[],"mappings":"AAyBA;;GAEG;AACH;IACE;;;;OAIG;IACH,6DAHG;QAAqB,iBAAiB,EAA9B,MAAM;QACQ,WAAW,GAAzB,MAAM;KAChB,EAUA;IAFC,uBAA0C;IAC1C,oBAA8B;IAGhC;;;;OAIG;IACH,kCAHG;QAA0D,OAAO,EAAzD,OAAO,aAAa,EAAE,qBAAqB;KACnD,GAAU,OAAO,CAAC,IAAI,CAAC,CA8DzB;CACF"}
@@ -0,0 +1,99 @@
1
+ // @ts-check
2
+ import restArgsError from "../../utils/rest-args-error.js";
3
+ /**
4
+ * @param {any} value - Recipient input.
5
+ * @returns {string[]} - Normalized recipients.
6
+ */
7
+ function normalizeRecipients(value) {
8
+ if (!value)
9
+ return [];
10
+ if (Array.isArray(value))
11
+ return value.filter((entry) => entry);
12
+ return [value].filter((entry) => entry);
13
+ }
14
+ /**
15
+ * @param {string} name - Header name.
16
+ * @param {string | undefined} value - Header value.
17
+ * @returns {string | null} - Header line.
18
+ */
19
+ function headerLine(name, value) {
20
+ if (!value)
21
+ return null;
22
+ return `${name}: ${value}`;
23
+ }
24
+ /**
25
+ * SMTP mailer backend using smtp-connection.
26
+ */
27
+ export default class SmtpMailerBackend {
28
+ /**
29
+ * @param {object} args - Constructor args.
30
+ * @param {object} args.connectionOptions - smtp-connection options.
31
+ * @param {string} [args.defaultFrom] - Default from address.
32
+ */
33
+ constructor({ connectionOptions, defaultFrom, ...restArgs }) {
34
+ restArgsError(restArgs);
35
+ if (!connectionOptions) {
36
+ throw new Error(`Missing smtp connection options. Got: ${String(connectionOptions)}`);
37
+ }
38
+ this.connectionOptions = connectionOptions;
39
+ this.defaultFrom = defaultFrom;
40
+ }
41
+ /**
42
+ * @param {object} args - Delivery args.
43
+ * @param {import("../index.js").MailerDeliveryPayload} args.payload - Mail delivery payload.
44
+ * @returns {Promise<void>} - Resolves when complete.
45
+ */
46
+ async deliver({ payload, ...restArgs }) {
47
+ restArgsError(restArgs);
48
+ const from = payload.from || this.defaultFrom;
49
+ if (!from) {
50
+ throw new Error(`Missing mail "from" address. Got: ${String(from)}`);
51
+ }
52
+ const toList = normalizeRecipients(payload.to);
53
+ const ccList = normalizeRecipients(payload.cc);
54
+ const bccList = normalizeRecipients(payload.bcc);
55
+ const recipients = [...toList, ...ccList, ...bccList];
56
+ if (recipients.length === 0) {
57
+ throw new Error(`Missing mail recipients. Got: ${JSON.stringify({ to: payload.to, cc: payload.cc, bcc: payload.bcc })}`);
58
+ }
59
+ const headers = [
60
+ headerLine("From", from),
61
+ headerLine("To", toList.length > 0 ? toList.join(", ") : undefined),
62
+ headerLine("Cc", ccList.length > 0 ? ccList.join(", ") : undefined),
63
+ headerLine("Subject", payload.subject),
64
+ "MIME-Version: 1.0",
65
+ "Content-Type: text/html; charset=UTF-8"
66
+ ].filter((line) => line);
67
+ if (payload.headers) {
68
+ for (const [headerName, headerValue] of Object.entries(payload.headers)) {
69
+ headers.push(`${headerName}: ${headerValue}`);
70
+ }
71
+ }
72
+ const message = `${headers.join("\r\n")}\r\n\r\n${payload.html}`;
73
+ const { default: SmtpConnection } = await import("smtp-connection");
74
+ const connection = new SmtpConnection(this.connectionOptions);
75
+ await new Promise((resolve, reject) => {
76
+ connection.connect((connectError) => {
77
+ if (connectError) {
78
+ reject(connectError);
79
+ return;
80
+ }
81
+ connection.send({ from, to: recipients }, message, (sendError) => {
82
+ if (sendError) {
83
+ connection.quit(() => reject(sendError));
84
+ return;
85
+ }
86
+ connection.quit((quitError) => {
87
+ if (quitError) {
88
+ reject(quitError);
89
+ }
90
+ else {
91
+ resolve(null);
92
+ }
93
+ });
94
+ });
95
+ });
96
+ });
97
+ }
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic210cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWlsZXIvYmFja2VuZHMvc210cC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFFMUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxLQUFLO0lBQ2hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDckIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDL0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDekMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSztJQUM3QixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRXZCLE9BQU8sR0FBRyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUE7QUFDNUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxpQkFBaUI7SUFDcEM7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDdkQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN2RixDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO1FBQzFDLElBQUksQ0FBQyxX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b0JBQ3BCLE9BQU07Z0JBQ1IsQ0FBQztnQkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDN0QsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO3dCQUN4QyxPQUFNO29CQUNSLENBQUM7b0JBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO3dCQUM1QixJQUFJLFNBQVMsRUFBRSxDQUFDOzRCQUNkLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTt3QkFDbkIsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDZixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFBO2dCQUNKLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBSZWNpcGllbnQgaW5wdXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IC0gTm9ybWFsaXplZCByZWNpcGllbnRzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWNpcGllbnRzKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBbXVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeSlcbiAgcmV0dXJuIFt2YWx1ZV0uZmlsdGVyKChlbnRyeSkgPT4gZW50cnkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBIZWFkZXIgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIEhlYWRlciB2YWx1ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIEhlYWRlciBsaW5lLlxuICovXG5mdW5jdGlvbiBoZWFkZXJMaW5lKG5hbWUsIHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIGAke25hbWV9OiAke3ZhbHVlfWBcbn1cblxuLyoqXG4gKiBTTVRQIG1haWxlciBiYWNrZW5kIHVzaW5nIHNtdHAtY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU210cE1haWxlckJhY2tlbmQge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBDb25zdHJ1Y3RvciBhcmdzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5jb25uZWN0aW9uT3B0aW9ucyAtIHNtdHAtY29ubmVjdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZGVmYXVsdEZyb21dIC0gRGVmYXVsdCBmcm9tIGFkZHJlc3MuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29ubmVjdGlvbk9wdGlvbnMsIGRlZmF1bHRGcm9tLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCFjb25uZWN0aW9uT3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHNtdHAgY29ubmVjdGlvbiBvcHRpb25zLiBHb3Q6ICR7U3RyaW5nKGNvbm5lY3Rpb25PcHRpb25zKX1gKVxuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvbk9wdGlvbnMgPSBjb25uZWN0aW9uT3B0aW9uc1xuICAgIHRoaXMuZGVmYXVsdEZyb20gPSBkZWZhdWx0RnJvbVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRGVsaXZlcnkgYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IGFyZ3MucGF5bG9hZCAtIE1haWwgZGVsaXZlcnkgcGF5bG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGRlbGl2ZXIoe3BheWxvYWQsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCBmcm9tID0gcGF5bG9hZC5mcm9tIHx8IHRoaXMuZGVmYXVsdEZyb21cblxuICAgIGlmICghZnJvbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG1haWwgXCJmcm9tXCIgYWRkcmVzcy4gR290OiAke1N0cmluZyhmcm9tKX1gKVxuICAgIH1cblxuICAgIGNvbnN0IHRvTGlzdCA9IG5vcm1hbGl6ZVJlY2lwaWVudHMocGF5bG9hZC50bylcbiAgICBjb25zdCBjY0xpc3QgPSBub3JtYWxpemVSZWNpcGllbnRzKHBheWxvYWQuY2MpXG4gICAgY29uc3QgYmNjTGlzdCA9IG5vcm1hbGl6ZVJlY2lwaWVudHMocGF5bG9hZC5iY2MpXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IFsuLi50b0xpc3QsIC4uLmNjTGlzdCwgLi4uYmNjTGlzdF1cblxuICAgIGlmIChyZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG1haWwgcmVjaXBpZW50cy4gR290OiAke0pTT04uc3RyaW5naWZ5KHt0bzogcGF5bG9hZC50bywgY2M6IHBheWxvYWQuY2MsIGJjYzogcGF5bG9hZC5iY2N9KX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXG4gICAgICBoZWFkZXJMaW5lKFwiRnJvbVwiLCBmcm9tKSxcbiAgICAgIGhlYWRlckxpbmUoXCJUb1wiLCB0b0xpc3QubGVuZ3RoID4gMCA/IHRvTGlzdC5qb2luKFwiLCBcIikgOiB1bmRlZmluZWQpLFxuICAgICAgaGVhZGVyTGluZShcIkNjXCIsIGNjTGlzdC5sZW5ndGggPiAwID8gY2NMaXN0LmpvaW4oXCIsIFwiKSA6IHVuZGVmaW5lZCksXG4gICAgICBoZWFkZXJMaW5lKFwiU3ViamVjdFwiLCBwYXlsb2FkLnN1YmplY3QpLFxuICAgICAgXCJNSU1FLVZlcnNpb246IDEuMFwiLFxuICAgICAgXCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiXG4gICAgXS5maWx0ZXIoKGxpbmUpID0+IGxpbmUpXG5cbiAgICBpZiAocGF5bG9hZC5oZWFkZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGF5bG9hZC5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzLnB1c2goYCR7aGVhZGVyTmFtZX06ICR7aGVhZGVyVmFsdWV9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYCR7aGVhZGVycy5qb2luKFwiXFxyXFxuXCIpfVxcclxcblxcclxcbiR7cGF5bG9hZC5odG1sfWBcbiAgICBjb25zdCB7ZGVmYXVsdDogU210cENvbm5lY3Rpb259ID0gYXdhaXQgaW1wb3J0KFwic210cC1jb25uZWN0aW9uXCIpXG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBTbXRwQ29ubmVjdGlvbih0aGlzLmNvbm5lY3Rpb25PcHRpb25zKVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdGlvbi5jb25uZWN0KChjb25uZWN0RXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGNvbm5lY3RFcnJvcikge1xuICAgICAgICAgIHJlamVjdChjb25uZWN0RXJyb3IpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25uZWN0aW9uLnNlbmQoe2Zyb20sIHRvOiByZWNpcGllbnRzfSwgbWVzc2FnZSwgKHNlbmRFcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChzZW5kRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24ucXVpdCgoKSA9PiByZWplY3Qoc2VuZEVycm9yKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbm5lY3Rpb24ucXVpdCgocXVpdEVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAocXVpdEVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChxdWl0RXJyb3IpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuIl19
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Base mailer with view rendering and delivery helpers.
3
+ */
4
+ export class VelociousMailerBase {
5
+ /**
6
+ * @returns {import("./index.js").MailerDeliveryPayload[]} - Delivered payloads.
7
+ */
8
+ static deliveries(): import("./index.js").MailerDeliveryPayload[];
9
+ /**
10
+ * @returns {void} - No return value.
11
+ */
12
+ static clearDeliveries(): void;
13
+ /**
14
+ * @param {(payload: import("./index.js").MailerDeliveryPayload) => Promise<unknown> | unknown} handler - Delivery handler.
15
+ * @returns {void} - No return value.
16
+ */
17
+ static setDeliveryHandler(handler: (payload: import("./index.js").MailerDeliveryPayload) => Promise<unknown> | unknown): void;
18
+ /**
19
+ * @returns {(payload: import("./index.js").MailerDeliveryPayload) => Promise<unknown> | unknown | null} - Handler or null.
20
+ */
21
+ static getDeliveryHandler(): (payload: import("./index.js").MailerDeliveryPayload) => Promise<unknown> | unknown | null;
22
+ /**
23
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
24
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload | unknown>} - Handler result.
25
+ */
26
+ static deliverPayload(payload: import("./index.js").MailerDeliveryPayload): Promise<import("./index.js").MailerDeliveryPayload | unknown>;
27
+ /**
28
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
29
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
30
+ */
31
+ static enqueuePayload(payload: import("./index.js").MailerDeliveryPayload): Promise<string | import("./index.js").MailerDeliveryPayload | null>;
32
+ /**
33
+ * @param {object} [args] - Constructor args.
34
+ * @param {import("../configuration.js").default} [args.configuration] - Configuration instance.
35
+ */
36
+ constructor({ configuration }?: {
37
+ configuration?: import("../configuration.js").default;
38
+ });
39
+ _actionName: string;
40
+ _mailOptions: {
41
+ to: any;
42
+ subject: string;
43
+ from: any;
44
+ cc: any;
45
+ bcc: any;
46
+ replyTo: any;
47
+ headers: Record<string, string>;
48
+ };
49
+ _viewParams: {};
50
+ _configurationPromise: Promise<import("../configuration.js").default>;
51
+ /**
52
+ * @param {Record<string, any>} params - View params.
53
+ * @returns {void} - No return value.
54
+ */
55
+ assignView(params: Record<string, any>): void;
56
+ /**
57
+ * @param {object} args - Mail options.
58
+ * @param {any} args.to - Recipient.
59
+ * @param {string} args.subject - Subject line.
60
+ * @param {any} [args.from] - Sender.
61
+ * @param {any} [args.cc] - CC recipients.
62
+ * @param {any} [args.bcc] - BCC recipients.
63
+ * @param {any} [args.replyTo] - Reply-to address.
64
+ * @param {Record<string, string>} [args.headers] - Custom headers.
65
+ * @returns {void} - No return value.
66
+ */
67
+ mail({ to, subject, from, cc, bcc, replyTo, headers, ...restArgs }: {
68
+ to: any;
69
+ subject: string;
70
+ from?: any;
71
+ cc?: any;
72
+ bcc?: any;
73
+ replyTo?: any;
74
+ headers?: Record<string, string>;
75
+ }): void;
76
+ /**
77
+ * @param {string} actionName - Action name.
78
+ * @param {any[]} args - Action args.
79
+ * @returns {MailerDelivery} - Delivery wrapper.
80
+ */
81
+ _buildDelivery(actionName: string, args: any[]): MailerDelivery;
82
+ /**
83
+ * @returns {Promise<import("../configuration.js").default>} - Configuration instance.
84
+ */
85
+ _getConfiguration(): Promise<import("../configuration.js").default>;
86
+ /**
87
+ * @returns {string} - Action name.
88
+ */
89
+ _getActionName(): string;
90
+ /**
91
+ * @param {string} html - Rendered HTML.
92
+ * @returns {import("./index.js").MailerDeliveryPayload} - Delivery payload.
93
+ */
94
+ _buildPayloadSync(html: string): import("./index.js").MailerDeliveryPayload;
95
+ /**
96
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload>} - Delivery payload.
97
+ */
98
+ _buildPayload(): Promise<import("./index.js").MailerDeliveryPayload>;
99
+ /**
100
+ * @returns {Promise<string>} - Rendered HTML.
101
+ */
102
+ _renderView(): Promise<string>;
103
+ }
104
+ import MailerDelivery from "./delivery.js";
105
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/mailer/base.js"],"names":[],"mappings":"AAyCA;;GAEG;AACH;IAmJE;;OAEG;IACH,qBAFa,OAAO,YAAY,EAAE,qBAAqB,EAAE,CAIxD;IAED;;OAEG;IACH,0BAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,mCAHW,CAAC,OAAO,EAAE,OAAO,YAAY,EAAE,qBAAqB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GACjF,IAAI,CAIhB;IAED;;OAEG;IACH,6BAFa,CAAC,OAAO,EAAE,OAAO,YAAY,EAAE,qBAAqB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,CAItG;IAED;;;OAGG;IACH,+BAHW,OAAO,YAAY,EAAE,qBAAqB,GACxC,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAsBzE;IAED;;;OAGG;IACH,+BAHW,OAAO,YAAY,EAAE,qBAAqB,GACxC,OAAO,CAAC,MAAM,GAAG,OAAO,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAW/E;IAtND;;;OAGG;IACH,gCAFG;QAAqD,aAAa,GAA1D,OAAO,qBAAqB,EAAE,OAAO;KAC/C,EAMA;IAJC,oBAAuB;IACvB;;;;;;;;MAAwB;IACxB,gBAAqB;IACrB,sEAAqG;IAGvG;;;OAGG;IACH,mBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,IAAI,CAIhB;IAED;;;;;;;;;;OAUG;IACH,oEATG;QAAkB,EAAE,EAAZ,GAAG;QACU,OAAO,EAApB,MAAM;QACK,IAAI,GAAf,GAAG;QACQ,EAAE,GAAb,GAAG;QACQ,GAAG,GAAd,GAAG;QACQ,OAAO,GAAlB,GAAG;QAC2B,OAAO,GAArC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;KAC9B,GAAU,IAAI,CAMhB;IAED;;;;OAIG;IACH,2BAJW,MAAM,QACN,GAAG,EAAE,GACH,cAAc,CAiB1B;IAED;;OAEG;IACH,qBAFa,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAI1D;IAED;;OAEG;IACH,kBAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,YAAY,EAAE,qBAAqB,CA6BtD;IAED;;OAEG;IACH,iBAFa,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,CAAC,CAM/D;IAED;;OAEG;IACH,eAFa,OAAO,CAAC,MAAM,CAAC,CAyB3B;CAuEF;2BA7P0B,eAAe"}
@@ -0,0 +1,223 @@
1
+ // @ts-check
2
+ import ejs from "ejs";
3
+ import { incorporate } from "incorporator";
4
+ import * as inflection from "inflection";
5
+ import configurationResolver from "../configuration-resolver.js";
6
+ import restArgsError from "../utils/rest-args-error.js";
7
+ import MailerDelivery from "./delivery.js";
8
+ /** @type {import("./index.js").MailerDeliveryPayload[]} */
9
+ const deliveries = [];
10
+ /** @type {((payload: import("./index.js").MailerDeliveryPayload) => Promise<unknown> | unknown) | null} */
11
+ let deliveryHandler = null;
12
+ /**
13
+ * @param {string} actionName - Mailer action name.
14
+ * @returns {string} - View file name.
15
+ */
16
+ function viewFileName(actionName) {
17
+ return inflection.dasherize(inflection.underscore(actionName));
18
+ }
19
+ /**
20
+ * @param {string} className - Mailer class name.
21
+ * @returns {string} - Mailer directory name.
22
+ */
23
+ function mailerDirectoryName(className) {
24
+ const baseName = className.replace(/Mailer$/, "");
25
+ return inflection.dasherize(inflection.underscore(baseName));
26
+ }
27
+ /**
28
+ * @returns {Promise<boolean>} - Whether the current environment is test.
29
+ */
30
+ async function isTestingEnvironment() {
31
+ const configuration = await configurationResolver();
32
+ return configuration.getEnvironment() === "test";
33
+ }
34
+ /**
35
+ * Base mailer with view rendering and delivery helpers.
36
+ */
37
+ export class VelociousMailerBase {
38
+ /**
39
+ * @param {object} [args] - Constructor args.
40
+ * @param {import("../configuration.js").default} [args.configuration] - Configuration instance.
41
+ */
42
+ constructor({ configuration } = {}) {
43
+ this._actionName = null;
44
+ this._mailOptions = null;
45
+ this._viewParams = {};
46
+ this._configurationPromise = configuration ? Promise.resolve(configuration) : configurationResolver();
47
+ }
48
+ /**
49
+ * @param {Record<string, any>} params - View params.
50
+ * @returns {void} - No return value.
51
+ */
52
+ assignView(params) {
53
+ this._viewParams = Object.assign(this._viewParams, params || {});
54
+ }
55
+ /**
56
+ * @param {object} args - Mail options.
57
+ * @param {any} args.to - Recipient.
58
+ * @param {string} args.subject - Subject line.
59
+ * @param {any} [args.from] - Sender.
60
+ * @param {any} [args.cc] - CC recipients.
61
+ * @param {any} [args.bcc] - BCC recipients.
62
+ * @param {any} [args.replyTo] - Reply-to address.
63
+ * @param {Record<string, string>} [args.headers] - Custom headers.
64
+ * @returns {void} - No return value.
65
+ */
66
+ mail({ to, subject, from, cc, bcc, replyTo, headers, ...restArgs }) {
67
+ restArgsError(restArgs);
68
+ this._mailOptions = { to, subject, from, cc, bcc, replyTo, headers };
69
+ }
70
+ /**
71
+ * @param {string} actionName - Action name.
72
+ * @param {any[]} args - Action args.
73
+ * @returns {MailerDelivery} - Delivery wrapper.
74
+ */
75
+ _buildDelivery(actionName, args) {
76
+ const action = this[actionName];
77
+ if (typeof action !== "function") {
78
+ throw new Error(`Unknown mailer method "${actionName}" on ${this.constructor.name}`);
79
+ }
80
+ this._actionName = actionName;
81
+ const actionResult = action.apply(this, args);
82
+ return new MailerDelivery({
83
+ mailer: this,
84
+ actionPromise: Promise.resolve(actionResult),
85
+ actionName
86
+ });
87
+ }
88
+ /**
89
+ * @returns {Promise<import("../configuration.js").default>} - Configuration instance.
90
+ */
91
+ async _getConfiguration() {
92
+ return await this._configurationPromise;
93
+ }
94
+ /**
95
+ * @returns {string} - Action name.
96
+ */
97
+ _getActionName() {
98
+ if (!this._actionName) {
99
+ throw new Error(`No mailer action set on ${this.constructor.name}`);
100
+ }
101
+ return this._actionName;
102
+ }
103
+ /**
104
+ * @param {string} html - Rendered HTML.
105
+ * @returns {import("./index.js").MailerDeliveryPayload} - Delivery payload.
106
+ */
107
+ _buildPayloadSync(html) {
108
+ const mailOptions = this._mailOptions;
109
+ if (!mailOptions) {
110
+ throw new Error(`Missing mail() options for ${this.constructor.name}#${this._getActionName()}. Got: ${String(mailOptions)}`);
111
+ }
112
+ if (!mailOptions.to) {
113
+ throw new Error(`Missing "to" for ${this.constructor.name}#${this._getActionName()}. Got: ${String(mailOptions.to)}`);
114
+ }
115
+ if (!mailOptions.subject) {
116
+ throw new Error(`Missing "subject" for ${this.constructor.name}#${this._getActionName()}. Got: ${String(mailOptions.subject)}`);
117
+ }
118
+ return {
119
+ to: mailOptions.to,
120
+ subject: mailOptions.subject,
121
+ from: mailOptions.from,
122
+ cc: mailOptions.cc,
123
+ bcc: mailOptions.bcc,
124
+ replyTo: mailOptions.replyTo,
125
+ headers: mailOptions.headers,
126
+ html,
127
+ mailer: this.constructor.name,
128
+ action: this._getActionName()
129
+ };
130
+ }
131
+ /**
132
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload>} - Delivery payload.
133
+ */
134
+ async _buildPayload() {
135
+ const html = await this._renderView();
136
+ return this._buildPayloadSync(html);
137
+ }
138
+ /**
139
+ * @returns {Promise<string>} - Rendered HTML.
140
+ */
141
+ async _renderView() {
142
+ const configuration = await this._getConfiguration();
143
+ const mailerDir = mailerDirectoryName(this.constructor.name);
144
+ const actionName = this._getActionName();
145
+ const fileName = viewFileName(actionName);
146
+ const viewPath = `${configuration.getDirectory()}/src/mailers/${mailerDir}/${fileName}.ejs`;
147
+ const viewParams = incorporate({ mailer: this }, this._viewParams);
148
+ return await new Promise((resolve, reject) => {
149
+ ejs.renderFile(viewPath, viewParams, {}, (err, str) => {
150
+ if (err) {
151
+ const errorCode = /** @type {{code?: string}} */ (err).code;
152
+ if (errorCode === "ENOENT") {
153
+ reject(new Error(`Missing mailer view file: ${viewPath}`));
154
+ }
155
+ else {
156
+ reject(err);
157
+ }
158
+ }
159
+ else {
160
+ resolve(str);
161
+ }
162
+ });
163
+ });
164
+ }
165
+ /**
166
+ * @returns {import("./index.js").MailerDeliveryPayload[]} - Delivered payloads.
167
+ */
168
+ static deliveries() {
169
+ return deliveries.slice();
170
+ }
171
+ /**
172
+ * @returns {void} - No return value.
173
+ */
174
+ static clearDeliveries() {
175
+ deliveries.length = 0;
176
+ }
177
+ /**
178
+ * @param {(payload: import("./index.js").MailerDeliveryPayload) => Promise<unknown> | unknown} handler - Delivery handler.
179
+ * @returns {void} - No return value.
180
+ */
181
+ static setDeliveryHandler(handler) {
182
+ deliveryHandler = handler;
183
+ }
184
+ /**
185
+ * @returns {(payload: import("./index.js").MailerDeliveryPayload) => Promise<unknown> | unknown | null} - Handler or null.
186
+ */
187
+ static getDeliveryHandler() {
188
+ return deliveryHandler;
189
+ }
190
+ /**
191
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
192
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload | unknown>} - Handler result.
193
+ */
194
+ static async deliverPayload(payload) {
195
+ if (await isTestingEnvironment()) {
196
+ deliveries.push(payload);
197
+ return payload;
198
+ }
199
+ const configuration = await configurationResolver();
200
+ const backend = configuration.getMailerBackend();
201
+ if (backend?.deliver) {
202
+ return await backend.deliver({ payload, configuration });
203
+ }
204
+ const handler = deliveryHandler;
205
+ if (!handler) {
206
+ throw new Error(`No mail delivery handler configured for "${payload.subject}" to "${payload.to}"`);
207
+ }
208
+ return await handler(payload);
209
+ }
210
+ /**
211
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
212
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
213
+ */
214
+ static async enqueuePayload(payload) {
215
+ if (await isTestingEnvironment()) {
216
+ deliveries.push(payload);
217
+ return payload;
218
+ }
219
+ const { default: mailDeliveryJob } = await import("../jobs/mail-delivery.js");
220
+ return await mailDeliveryJob.performLater(payload);
221
+ }
222
+ }
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYWlsZXIvYmFzZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBQ3JCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxxQkFBcUIsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLGNBQWMsTUFBTSxlQUFlLENBQUE7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQiwyR0FBMkc7QUFDM0csSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFBO0FBRTFCOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLFVBQVU7SUFDOUIsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxTQUFTO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRWpELE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLG9CQUFvQjtJQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7SUFFbkQsT0FBTyxhQUFhLENBQUMsY0FBYyxFQUFFLEtBQUssTUFBTSxDQUFBO0FBQ2xELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7OztPQUdH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Q0FBQyxDQUFBO1FBRTNFLE9BQU8sTUFBTSxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZWpzIGZyb20gXCJlanNcIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBjb25maWd1cmF0aW9uUmVzb2x2ZXIgZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb24tcmVzb2x2ZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgTWFpbGVyRGVsaXZlcnkgZnJvbSBcIi4vZGVsaXZlcnkuanNcIlxuXG4vKiogQHR5cGUge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkW119ICovXG5jb25zdCBkZWxpdmVyaWVzID0gW11cbi8qKiBAdHlwZSB7KChwYXlsb2FkOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24pIHwgbnVsbH0gKi9cbmxldCBkZWxpdmVyeUhhbmRsZXIgPSBudWxsXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBNYWlsZXIgYWN0aW9uIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFZpZXcgZmlsZSBuYW1lLlxuICovXG5mdW5jdGlvbiB2aWV3RmlsZU5hbWUoYWN0aW9uTmFtZSkge1xuICByZXR1cm4gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFjdGlvbk5hbWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgLSBNYWlsZXIgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTWFpbGVyIGRpcmVjdG9yeSBuYW1lLlxuICovXG5mdW5jdGlvbiBtYWlsZXJEaXJlY3RvcnlOYW1lKGNsYXNzTmFtZSkge1xuICBjb25zdCBiYXNlTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKC9NYWlsZXIkLywgXCJcIilcblxuICByZXR1cm4gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGJhc2VOYW1lKSlcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIHRlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzVGVzdGluZ0Vudmlyb25tZW50KCkge1xuICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcblxuICByZXR1cm4gY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudCgpID09PSBcInRlc3RcIlxufVxuXG4vKipcbiAqIEJhc2UgbWFpbGVyIHdpdGggdmlldyByZW5kZXJpbmcgYW5kIGRlbGl2ZXJ5IGhlbHBlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWxvY2lvdXNNYWlsZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBDb25zdHJ1Y3RvciBhcmdzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gW2FyZ3MuY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb259ID0ge30pIHtcbiAgICB0aGlzLl9hY3Rpb25OYW1lID0gbnVsbFxuICAgIHRoaXMuX21haWxPcHRpb25zID0gbnVsbFxuICAgIHRoaXMuX3ZpZXdQYXJhbXMgPSB7fVxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25Qcm9taXNlID0gY29uZmlndXJhdGlvbiA/IFByb21pc2UucmVzb2x2ZShjb25maWd1cmF0aW9uKSA6IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBWaWV3IHBhcmFtcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYXNzaWduVmlldyhwYXJhbXMpIHtcbiAgICB0aGlzLl92aWV3UGFyYW1zID0gT2JqZWN0LmFzc2lnbih0aGlzLl92aWV3UGFyYW1zLCBwYXJhbXMgfHwge30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBNYWlsIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnRvIC0gUmVjaXBpZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zdWJqZWN0IC0gU3ViamVjdCBsaW5lLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MuZnJvbV0gLSBTZW5kZXIuXG4gICAqIEBwYXJhbSB7YW55fSBbYXJncy5jY10gLSBDQyByZWNpcGllbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MuYmNjXSAtIEJDQyByZWNpcGllbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MucmVwbHlUb10gLSBSZXBseS10byBhZGRyZXNzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFthcmdzLmhlYWRlcnNdIC0gQ3VzdG9tIGhlYWRlcnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG1haWwoe3RvLCBzdWJqZWN0LCBmcm9tLCBjYywgYmNjLCByZXBseVRvLCBoZWFkZXJzLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5fbWFpbE9wdGlvbnMgPSB7dG8sIHN1YmplY3QsIGZyb20sIGNjLCBiY2MsIHJlcGx5VG8sIGhlYWRlcnN9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBBY3Rpb24gbmFtZS5cbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFjdGlvbiBhcmdzLlxuICAgKiBAcmV0dXJucyB7TWFpbGVyRGVsaXZlcnl9IC0gRGVsaXZlcnkgd3JhcHBlci5cbiAgICovXG4gIF9idWlsZERlbGl2ZXJ5KGFjdGlvbk5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzW2FjdGlvbk5hbWVdXG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbWFpbGVyIG1ldGhvZCBcIiR7YWN0aW9uTmFtZX1cIiBvbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGlvbk5hbWUgPSBhY3Rpb25OYW1lXG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpXG5cbiAgICByZXR1cm4gbmV3IE1haWxlckRlbGl2ZXJ5KHtcbiAgICAgIG1haWxlcjogdGhpcyxcbiAgICAgIGFjdGlvblByb21pc2U6IFByb21pc2UucmVzb2x2ZShhY3Rpb25SZXN1bHQpLFxuICAgICAgYWN0aW9uTmFtZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0Pn0gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgYXN5bmMgX2dldENvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRpb25Qcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBBY3Rpb24gbmFtZS5cbiAgICovXG4gIF9nZXRBY3Rpb25OYW1lKCkge1xuICAgIGlmICghdGhpcy5fYWN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBtYWlsZXIgYWN0aW9uIHNldCBvbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBSZW5kZXJlZCBIVE1MLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IC0gRGVsaXZlcnkgcGF5bG9hZC5cbiAgICovXG4gIF9idWlsZFBheWxvYWRTeW5jKGh0bWwpIHtcbiAgICBjb25zdCBtYWlsT3B0aW9ucyA9IHRoaXMuX21haWxPcHRpb25zXG5cbiAgICBpZiAoIW1haWxPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbWFpbCgpIG9wdGlvbnMgZm9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMuX2dldEFjdGlvbk5hbWUoKX0uIEdvdDogJHtTdHJpbmcobWFpbE9wdGlvbnMpfWApXG4gICAgfVxuXG4gICAgaWYgKCFtYWlsT3B0aW9ucy50bykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIFwidG9cIiBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5fZ2V0QWN0aW9uTmFtZSgpfS4gR290OiAke1N0cmluZyhtYWlsT3B0aW9ucy50byl9YClcbiAgICB9XG5cbiAgICBpZiAoIW1haWxPcHRpb25zLnN1YmplY3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBcInN1YmplY3RcIiBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5fZ2V0QWN0aW9uTmFtZSgpfS4gR290OiAke1N0cmluZyhtYWlsT3B0aW9ucy5zdWJqZWN0KX1gKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0bzogbWFpbE9wdGlvbnMudG8sXG4gICAgICBzdWJqZWN0OiBtYWlsT3B0aW9ucy5zdWJqZWN0LFxuICAgICAgZnJvbTogbWFpbE9wdGlvbnMuZnJvbSxcbiAgICAgIGNjOiBtYWlsT3B0aW9ucy5jYyxcbiAgICAgIGJjYzogbWFpbE9wdGlvbnMuYmNjLFxuICAgICAgcmVwbHlUbzogbWFpbE9wdGlvbnMucmVwbHlUbyxcbiAgICAgIGhlYWRlcnM6IG1haWxPcHRpb25zLmhlYWRlcnMsXG4gICAgICBodG1sLFxuICAgICAgbWFpbGVyOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICBhY3Rpb246IHRoaXMuX2dldEFjdGlvbk5hbWUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZD59IC0gRGVsaXZlcnkgcGF5bG9hZC5cbiAgICovXG4gIGFzeW5jIF9idWlsZFBheWxvYWQoKSB7XG4gICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuX3JlbmRlclZpZXcoKVxuXG4gICAgcmV0dXJuIHRoaXMuX2J1aWxkUGF5bG9hZFN5bmMoaHRtbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFJlbmRlcmVkIEhUTUwuXG4gICAqL1xuICBhc3luYyBfcmVuZGVyVmlldygpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgdGhpcy5fZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgY29uc3QgbWFpbGVyRGlyID0gbWFpbGVyRGlyZWN0b3J5TmFtZSh0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IHRoaXMuX2dldEFjdGlvbk5hbWUoKVxuICAgIGNvbnN0IGZpbGVOYW1lID0gdmlld0ZpbGVOYW1lKGFjdGlvbk5hbWUpXG4gICAgY29uc3Qgdmlld1BhdGggPSBgJHtjb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvbWFpbGVycy8ke21haWxlckRpcn0vJHtmaWxlTmFtZX0uZWpzYFxuICAgIGNvbnN0IHZpZXdQYXJhbXMgPSBpbmNvcnBvcmF0ZSh7bWFpbGVyOiB0aGlzfSwgdGhpcy5fdmlld1BhcmFtcylcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlanMucmVuZGVyRmlsZSh2aWV3UGF0aCwgdmlld1BhcmFtcywge30sIChlcnIsIHN0cikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gLyoqIEB0eXBlIHt7Y29kZT86IHN0cmluZ319ICovIChlcnIpLmNvZGVcblxuICAgICAgICAgIGlmIChlcnJvckNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgbWFpbGVyIHZpZXcgZmlsZTogJHt2aWV3UGF0aH1gKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzdHIpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWRbXX0gLSBEZWxpdmVyZWQgcGF5bG9hZHMuXG4gICAqL1xuICBzdGF0aWMgZGVsaXZlcmllcygpIHtcbiAgICByZXR1cm4gZGVsaXZlcmllcy5zbGljZSgpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIGNsZWFyRGVsaXZlcmllcygpIHtcbiAgICBkZWxpdmVyaWVzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyhwYXlsb2FkOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd259IGhhbmRsZXIgLSBEZWxpdmVyeSBoYW5kbGVyLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgc2V0RGVsaXZlcnlIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICBkZWxpdmVyeUhhbmRsZXIgPSBoYW5kbGVyXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgeyhwYXlsb2FkOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24gfCBudWxsfSAtIEhhbmRsZXIgb3IgbnVsbC5cbiAgICovXG4gIHN0YXRpYyBnZXREZWxpdmVyeUhhbmRsZXIoKSB7XG4gICAgcmV0dXJuIGRlbGl2ZXJ5SGFuZGxlclxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IHBheWxvYWQgLSBNYWlsIGRlbGl2ZXJ5IHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkIHwgdW5rbm93bj59IC0gSGFuZGxlciByZXN1bHQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZGVsaXZlclBheWxvYWQocGF5bG9hZCkge1xuICAgIGlmIChhd2FpdCBpc1Rlc3RpbmdFbnZpcm9ubWVudCgpKSB7XG4gICAgICBkZWxpdmVyaWVzLnB1c2gocGF5bG9hZClcbiAgICAgIHJldHVybiBwYXlsb2FkXG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG4gICAgY29uc3QgYmFja2VuZCA9IGNvbmZpZ3VyYXRpb24uZ2V0TWFpbGVyQmFja2VuZCgpXG5cbiAgICBpZiAoYmFja2VuZD8uZGVsaXZlcikge1xuICAgICAgcmV0dXJuIGF3YWl0IGJhY2tlbmQuZGVsaXZlcih7cGF5bG9hZCwgY29uZmlndXJhdGlvbn0pXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IGRlbGl2ZXJ5SGFuZGxlclxuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1haWwgZGVsaXZlcnkgaGFuZGxlciBjb25maWd1cmVkIGZvciBcIiR7cGF5bG9hZC5zdWJqZWN0fVwiIHRvIFwiJHtwYXlsb2FkLnRvfVwiYClcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgaGFuZGxlcihwYXlsb2FkKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IHBheWxvYWQgLSBNYWlsIGRlbGl2ZXJ5IHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkIHwgbnVsbD59IC0gSm9iIGlkIG9yIHBheWxvYWQgaW4gdGVzdCBtb2RlLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGVucXVldWVQYXlsb2FkKHBheWxvYWQpIHtcbiAgICBpZiAoYXdhaXQgaXNUZXN0aW5nRW52aXJvbm1lbnQoKSkge1xuICAgICAgZGVsaXZlcmllcy5wdXNoKHBheWxvYWQpXG4gICAgICByZXR1cm4gcGF5bG9hZFxuICAgIH1cblxuICAgIGNvbnN0IHtkZWZhdWx0OiBtYWlsRGVsaXZlcnlKb2J9ID0gYXdhaXQgaW1wb3J0KFwiLi4vam9icy9tYWlsLWRlbGl2ZXJ5LmpzXCIpXG5cbiAgICByZXR1cm4gYXdhaXQgbWFpbERlbGl2ZXJ5Sm9iLnBlcmZvcm1MYXRlcihwYXlsb2FkKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Represents a prepared mail delivery.
3
+ */
4
+ export default class MailerDelivery {
5
+ /**
6
+ * @param {object} args - Constructor args.
7
+ * @param {import("./base.js").VelociousMailerBase} args.mailer - Mailer instance.
8
+ * @param {Promise<unknown>} args.actionPromise - Action promise.
9
+ * @param {string} args.actionName - Action name.
10
+ */
11
+ constructor({ mailer, actionPromise, actionName }: {
12
+ mailer: import("./base.js").VelociousMailerBase;
13
+ actionPromise: Promise<unknown>;
14
+ actionName: string;
15
+ });
16
+ /** @type {import("./base.js").VelociousMailerBase} */
17
+ mailer: import("./base.js").VelociousMailerBase;
18
+ /** @type {Promise<unknown>} */
19
+ actionPromise: Promise<unknown>;
20
+ /** @type {string} */
21
+ actionName: string;
22
+ /**
23
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload | unknown>} - Delivered payload or handler result.
24
+ */
25
+ deliverNow(): Promise<import("./index.js").MailerDeliveryPayload | unknown>;
26
+ /**
27
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
28
+ */
29
+ deliverLater(): Promise<string | import("./index.js").MailerDeliveryPayload | null>;
30
+ /**
31
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
32
+ */
33
+ deliverLaver(): Promise<string | import("./index.js").MailerDeliveryPayload | null>;
34
+ }
35
+ //# sourceMappingURL=delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/mailer/delivery.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IAQE;;;;;OAKG;IACH,mDAJG;QAAsD,MAAM,EAApD,OAAO,WAAW,EAAE,mBAAmB;QAChB,aAAa,EAApC,OAAO,CAAC,OAAO,CAAC;QACH,UAAU,EAAvB,MAAM;KAChB,EAKA;IAjBD,sDAAsD;IACtD,QADW,OAAO,WAAW,EAAE,mBAAmB,CAC5C;IACN,+BAA+B;IAC/B,eADW,OAAO,CAAC,OAAO,CAAC,CACd;IACb,qBAAqB;IACrB,YADW,MAAM,CACP;IAcV;;OAEG;IACH,cAFa,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAQzE;IAED;;OAEG;IACH,gBAFa,OAAO,CAAC,MAAM,GAAG,OAAO,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAQ/E;IAED;;OAEG;IACH,gBAFa,OAAO,CAAC,MAAM,GAAG,OAAO,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAI/E;CACF"}
@@ -0,0 +1,48 @@
1
+ // @ts-check
2
+ /**
3
+ * Represents a prepared mail delivery.
4
+ */
5
+ export default class MailerDelivery {
6
+ /** @type {import("./base.js").VelociousMailerBase} */
7
+ mailer;
8
+ /** @type {Promise<unknown>} */
9
+ actionPromise;
10
+ /** @type {string} */
11
+ actionName;
12
+ /**
13
+ * @param {object} args - Constructor args.
14
+ * @param {import("./base.js").VelociousMailerBase} args.mailer - Mailer instance.
15
+ * @param {Promise<unknown>} args.actionPromise - Action promise.
16
+ * @param {string} args.actionName - Action name.
17
+ */
18
+ constructor({ mailer, actionPromise, actionName }) {
19
+ this.mailer = mailer;
20
+ this.actionPromise = actionPromise;
21
+ this.actionName = actionName;
22
+ }
23
+ /**
24
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload | unknown>} - Delivered payload or handler result.
25
+ */
26
+ async deliverNow() {
27
+ await this.actionPromise;
28
+ const payload = /** @type {import("./index.js").MailerDeliveryPayload} */ (await this.mailer._buildPayload());
29
+ const mailerClass = /** @type {typeof import("./base.js").VelociousMailerBase} */ (this.mailer.constructor);
30
+ return await mailerClass.deliverPayload(payload);
31
+ }
32
+ /**
33
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
34
+ */
35
+ async deliverLater() {
36
+ await this.actionPromise;
37
+ const payload = /** @type {import("./index.js").MailerDeliveryPayload} */ (await this.mailer._buildPayload());
38
+ const mailerClass = /** @type {typeof import("./base.js").VelociousMailerBase} */ (this.mailer.constructor);
39
+ return await mailerClass.enqueuePayload(payload);
40
+ }
41
+ /**
42
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
43
+ */
44
+ async deliverLaver() {
45
+ return await this.deliverLater();
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaXZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFpbGVyL2RlbGl2ZXJ5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxzREFBc0Q7SUFDdEQsTUFBTSxDQUFBO0lBQ04sK0JBQStCO0lBQy9CLGFBQWEsQ0FBQTtJQUNiLHFCQUFxQjtJQUNyQixVQUFVLENBQUE7SUFFVjs7Ozs7T0FLRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVTtRQUNkLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQTtRQUN4QixNQUFNLE9BQU8sR0FBRyx5REFBeUQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1FBQzdHLE1BQU0sV0FBVyxHQUFHLDZEQUE2RCxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUzRyxPQUFPLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUE7UUFDeEIsTUFBTSxPQUFPLEdBQUcseURBQXlELENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUM3RyxNQUFNLFdBQVcsR0FBRyw2REFBNkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFM0csT0FBTyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDaEIsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcHJlcGFyZWQgbWFpbCBkZWxpdmVyeS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbGVyRGVsaXZlcnkge1xuICAvKiogQHR5cGUge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5WZWxvY2lvdXNNYWlsZXJCYXNlfSAqL1xuICBtYWlsZXJcbiAgLyoqIEB0eXBlIHtQcm9taXNlPHVua25vd24+fSAqL1xuICBhY3Rpb25Qcm9taXNlXG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBhY3Rpb25OYW1lXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQ29uc3RydWN0b3IgYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuVmVsb2Npb3VzTWFpbGVyQmFzZX0gYXJncy5tYWlsZXIgLSBNYWlsZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7UHJvbWlzZTx1bmtub3duPn0gYXJncy5hY3Rpb25Qcm9taXNlIC0gQWN0aW9uIHByb21pc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmFjdGlvbk5hbWUgLSBBY3Rpb24gbmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHttYWlsZXIsIGFjdGlvblByb21pc2UsIGFjdGlvbk5hbWV9KSB7XG4gICAgdGhpcy5tYWlsZXIgPSBtYWlsZXJcbiAgICB0aGlzLmFjdGlvblByb21pc2UgPSBhY3Rpb25Qcm9taXNlXG4gICAgdGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uTmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkIHwgdW5rbm93bj59IC0gRGVsaXZlcmVkIHBheWxvYWQgb3IgaGFuZGxlciByZXN1bHQuXG4gICAqL1xuICBhc3luYyBkZWxpdmVyTm93KCkge1xuICAgIGF3YWl0IHRoaXMuYWN0aW9uUHJvbWlzZVxuICAgIGNvbnN0IHBheWxvYWQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSAqLyAoYXdhaXQgdGhpcy5tYWlsZXIuX2J1aWxkUGF5bG9hZCgpKVxuICAgIGNvbnN0IG1haWxlckNsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9iYXNlLmpzXCIpLlZlbG9jaW91c01haWxlckJhc2V9ICovICh0aGlzLm1haWxlci5jb25zdHJ1Y3RvcilcblxuICAgIHJldHVybiBhd2FpdCBtYWlsZXJDbGFzcy5kZWxpdmVyUGF5bG9hZChwYXlsb2FkKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkIHwgbnVsbD59IC0gSm9iIGlkIG9yIHBheWxvYWQgaW4gdGVzdCBtb2RlLlxuICAgKi9cbiAgYXN5bmMgZGVsaXZlckxhdGVyKCkge1xuICAgIGF3YWl0IHRoaXMuYWN0aW9uUHJvbWlzZVxuICAgIGNvbnN0IHBheWxvYWQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSAqLyAoYXdhaXQgdGhpcy5tYWlsZXIuX2J1aWxkUGF5bG9hZCgpKVxuICAgIGNvbnN0IG1haWxlckNsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9iYXNlLmpzXCIpLlZlbG9jaW91c01haWxlckJhc2V9ICovICh0aGlzLm1haWxlci5jb25zdHJ1Y3RvcilcblxuICAgIHJldHVybiBhd2FpdCBtYWlsZXJDbGFzcy5lbnF1ZXVlUGF5bG9hZChwYXlsb2FkKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkIHwgbnVsbD59IC0gSm9iIGlkIG9yIHBheWxvYWQgaW4gdGVzdCBtb2RlLlxuICAgKi9cbiAgYXN5bmMgZGVsaXZlckxhdmVyKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmRlbGl2ZXJMYXRlcigpXG4gIH1cbn1cbiJdfQ==