@betterinternship/core 2.14.1 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Package.Core
|
|
2
|
+
|
|
3
|
+
Contains dependencies shared between the different services of the site.
|
|
4
|
+
|
|
5
|
+
## How to update
|
|
6
|
+
|
|
7
|
+
1. Build the package:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run build
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
2. Commit the build:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
git add .
|
|
17
|
+
git commit -m "<follow conventional commits, k thanks>"
|
|
18
|
+
git push
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
3. Update the version and publish the package to NPM:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm version <patch|minor|major>
|
|
25
|
+
npm publish
|
|
26
|
+
```
|
|
@@ -17,6 +17,12 @@ export interface IMultiEmailParams {
|
|
|
17
17
|
content: string;
|
|
18
18
|
alias?: EmailAlias;
|
|
19
19
|
}
|
|
20
|
-
export declare const sendSingleEmail: (params: IEmailParams) => Promise<
|
|
21
|
-
|
|
20
|
+
export declare const sendSingleEmail: (params: IEmailParams) => Promise<{
|
|
21
|
+
messageId: string | undefined;
|
|
22
|
+
response: string;
|
|
23
|
+
} | undefined>;
|
|
24
|
+
export declare const sendMultiEmail: (params: IMultiEmailParams) => Promise<{
|
|
25
|
+
messageId: string | undefined;
|
|
26
|
+
response: string;
|
|
27
|
+
} | undefined>;
|
|
22
28
|
export {};
|
package/dist/lib/email/email.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { SendEmailCommand } from '@aws-sdk/client-ses';
|
|
2
2
|
import { SESClient } from '@aws-sdk/client-ses';
|
|
3
|
-
import * as nodemailer from 'nodemailer';
|
|
4
|
-
import { v4 } from 'uuid';
|
|
5
3
|
import { ENV } from '../env.js';
|
|
6
4
|
const SMTP_EMAIL = ENV.SMTP_EMAIL;
|
|
7
5
|
const SMTP_PASSWORD = ENV.SMTP_PASSWORD;
|
|
@@ -16,17 +14,6 @@ if (AWS_DISABLED)
|
|
|
16
14
|
export const sesClient = new SESClient({
|
|
17
15
|
region: ENV.AWS_REGION,
|
|
18
16
|
});
|
|
19
|
-
const transporter = nodemailer.createTransport({
|
|
20
|
-
service: 'Gmail',
|
|
21
|
-
host: 'smtp.gmail.com',
|
|
22
|
-
port: 465,
|
|
23
|
-
secure: true,
|
|
24
|
-
auth: {
|
|
25
|
-
user: SMTP_EMAIL,
|
|
26
|
-
pass: SMTP_PASSWORD,
|
|
27
|
-
},
|
|
28
|
-
messageId: `${v4()}${SMTP_EMAIL}`,
|
|
29
|
-
});
|
|
30
17
|
const onEmailError = (recipient, resolve) => (error, info) => {
|
|
31
18
|
if (error) {
|
|
32
19
|
console.error('[ERROR:EMAIL] Could not send email.');
|
|
@@ -48,34 +35,6 @@ const normalizeRecipients = (value) => {
|
|
|
48
35
|
...new Set(list.map((recipient) => recipient.trim()).filter(Boolean)),
|
|
49
36
|
];
|
|
50
37
|
};
|
|
51
|
-
const traditionalEmailRoute = async ({ sender, subject, recipient, content, alias = 'hello', }) => {
|
|
52
|
-
return new Promise((resolve) => {
|
|
53
|
-
transporter.sendMail({
|
|
54
|
-
from: `"${sender ?? 'BetterInternship'}" <${alias}@betterinternship.com>`,
|
|
55
|
-
to: recipient,
|
|
56
|
-
subject,
|
|
57
|
-
html: content,
|
|
58
|
-
}, onEmailError(recipient, resolve));
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
const traditionalMultiEmailRoute = async ({ sender, subject, to, cc, bcc, content, alias = 'hello', }) => {
|
|
62
|
-
const toRecipients = normalizeRecipients(to);
|
|
63
|
-
if (!toRecipients.length)
|
|
64
|
-
throw Error('[ERROR:EMAIL] No recipients provided for email.');
|
|
65
|
-
const ccRecipients = normalizeRecipients(cc);
|
|
66
|
-
const bccRecipients = normalizeRecipients(bcc);
|
|
67
|
-
const logRecipients = [...toRecipients, ...ccRecipients, ...bccRecipients];
|
|
68
|
-
return new Promise((resolve) => {
|
|
69
|
-
transporter.sendMail({
|
|
70
|
-
from: `"${sender ?? 'BetterInternship'}" <${alias}@betterinternship.com>`,
|
|
71
|
-
to: toRecipients,
|
|
72
|
-
cc: ccRecipients.length ? ccRecipients : undefined,
|
|
73
|
-
bcc: bccRecipients.length ? bccRecipients : undefined,
|
|
74
|
-
subject,
|
|
75
|
-
html: content,
|
|
76
|
-
}, onEmailError(logRecipients.join(', '), resolve));
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
38
|
const amazonEmailRoute = async ({ sender, subject, recipient, content, alias = 'hello', }) => {
|
|
80
39
|
const params = {
|
|
81
40
|
Destination: {
|
|
@@ -139,33 +98,9 @@ const amazonMultiEmailRoute = async ({ sender, subject, to, cc, bcc, content, al
|
|
|
139
98
|
}
|
|
140
99
|
};
|
|
141
100
|
export const sendSingleEmail = async (params) => {
|
|
142
|
-
|
|
143
|
-
return await traditionalEmailRoute(params);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
const dice = Math.random();
|
|
147
|
-
const threshold = 0;
|
|
148
|
-
if (dice < threshold) {
|
|
149
|
-
return await traditionalEmailRoute(params);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
return await amazonEmailRoute(params);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
101
|
+
return await amazonEmailRoute(params);
|
|
155
102
|
};
|
|
156
103
|
export const sendMultiEmail = async (params) => {
|
|
157
|
-
|
|
158
|
-
return await traditionalMultiEmailRoute(params);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
const dice = Math.random();
|
|
162
|
-
const threshold = 0;
|
|
163
|
-
if (dice < threshold) {
|
|
164
|
-
return await traditionalMultiEmailRoute(params);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
return await amazonMultiEmailRoute(params);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
104
|
+
return await amazonMultiEmailRoute(params);
|
|
170
105
|
};
|
|
171
106
|
//# sourceMappingURL=email.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../lib/email/email.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../lib/email/email.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,13 +77,13 @@ export const ensurePreviewFontsLoaded = () => {
|
|
|
77
77
|
if (!document.getElementById(PREVIEW_FONT_STYLE_ID)) {
|
|
78
78
|
const style = document.createElement("style");
|
|
79
79
|
style.id = PREVIEW_FONT_STYLE_ID;
|
|
80
|
-
style.textContent = `
|
|
81
|
-
@font-face {
|
|
82
|
-
font-family: "MegastinaPreview";
|
|
83
|
-
src: url("/fonts/megastina.regular.ttf") format("truetype");
|
|
84
|
-
font-weight: 400;
|
|
85
|
-
font-style: normal;
|
|
86
|
-
font-display: block;
|
|
80
|
+
style.textContent = `
|
|
81
|
+
@font-face {
|
|
82
|
+
font-family: "MegastinaPreview";
|
|
83
|
+
src: url("/fonts/megastina.regular.ttf") format("truetype");
|
|
84
|
+
font-weight: 400;
|
|
85
|
+
font-style: normal;
|
|
86
|
+
font-display: block;
|
|
87
87
|
}`;
|
|
88
88
|
document.head.appendChild(style);
|
|
89
89
|
}
|