diff --git a/package.json b/package.json index b247193af..ad2edefa3 100644 --- a/package.json +++ b/package.json @@ -94,6 +94,7 @@ "copy-to-clipboard": "^3.3.3", "core-js": "^3.33.3", "crypto-js": "^4.2.0", + "css-inline": "^0.11.0", "datadog-metrics": "^0.11.1", "date-fns": "^2.30.0", "dd-trace": "^3.33.0", @@ -116,7 +117,6 @@ "i18next": "^22.5.1", "i18next-fs-backend": "^2.1.5", "i18next-http-backend": "^2.2.2", - "inline-css": "^4.0.2", "invariant": "^2.2.4", "ioredis": "^5.3.2", "is-printable-key-event": "^1.0.0", @@ -255,7 +255,6 @@ "@types/fuzzy-search": "^2.1.2", "@types/glob": "^8.0.1", "@types/google.analytics": "^0.0.42", - "@types/inline-css": "^3.0.3", "@types/invariant": "^2.2.35", "@types/jest": "^29.4.0", "@types/jsonwebtoken": "^8.5.9", @@ -355,8 +354,7 @@ "js-yaml": "^3.14.1", "jpeg-js": "0.4.4", "qs": "6.9.7", - "rollup": "^4.5.1", - "vm2": "3.9.19" + "rollup": "^4.5.1" }, "version": "0.73.1" } diff --git a/server/emails/templates/CommentCreatedEmail.tsx b/server/emails/templates/CommentCreatedEmail.tsx index 157c5607c..42db92728 100644 --- a/server/emails/templates/CommentCreatedEmail.tsx +++ b/server/emails/templates/CommentCreatedEmail.tsx @@ -1,10 +1,9 @@ -import inlineCss from "inline-css"; import * as React from "react"; import { NotificationEventType } from "@shared/types"; import { Day } from "@shared/utils/time"; -import env from "@server/env"; import { Collection, Comment, Document } from "@server/models"; import DocumentHelper from "@server/models/helpers/DocumentHelper"; +import HTMLHelper from "@server/models/helpers/HTMLHelper"; import NotificationSettingsHelper from "@server/models/helpers/NotificationSettingsHelper"; import ProsemirrorHelper from "@server/models/helpers/ProsemirrorHelper"; import BaseEmail, { EmailProps } from "./BaseEmail"; @@ -83,12 +82,7 @@ export default class CommentCreatedEmail extends BaseEmail< if (content) { // inline all css so that it works in as many email providers as possible. - body = await inlineCss(content, { - url: env.URL, - applyStyleTags: true, - applyLinkTags: false, - removeStyleTags: true, - }); + body = HTMLHelper.inlineCSS(content); } const isReply = !!comment.parentCommentId; diff --git a/server/emails/templates/CommentMentionedEmail.tsx b/server/emails/templates/CommentMentionedEmail.tsx index b99aa4b1a..f97239fef 100644 --- a/server/emails/templates/CommentMentionedEmail.tsx +++ b/server/emails/templates/CommentMentionedEmail.tsx @@ -1,10 +1,9 @@ -import inlineCss from "inline-css"; import * as React from "react"; import { NotificationEventType } from "@shared/types"; import { Day } from "@shared/utils/time"; -import env from "@server/env"; import { Collection, Comment, Document } from "@server/models"; import DocumentHelper from "@server/models/helpers/DocumentHelper"; +import HTMLHelper from "@server/models/helpers/HTMLHelper"; import NotificationSettingsHelper from "@server/models/helpers/NotificationSettingsHelper"; import ProsemirrorHelper from "@server/models/helpers/ProsemirrorHelper"; import BaseEmail, { EmailProps } from "./BaseEmail"; @@ -75,12 +74,7 @@ export default class CommentMentionedEmail extends BaseEmail< if (content) { // inline all css so that it works in as many email providers as possible. - body = await inlineCss(content, { - url: env.URL, - applyStyleTags: true, - applyLinkTags: false, - removeStyleTags: true, - }); + body = HTMLHelper.inlineCSS(content); } return { diff --git a/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx b/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx index 452a73d9c..ce215a1b1 100644 --- a/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx +++ b/server/emails/templates/DocumentPublishedOrUpdatedEmail.tsx @@ -1,10 +1,9 @@ -import inlineCss from "inline-css"; import * as React from "react"; import { NotificationEventType } from "@shared/types"; import { Day } from "@shared/utils/time"; -import env from "@server/env"; import { Document, Collection, Revision } from "@server/models"; import DocumentHelper from "@server/models/helpers/DocumentHelper"; +import HTMLHelper from "@server/models/helpers/HTMLHelper"; import NotificationSettingsHelper from "@server/models/helpers/NotificationSettingsHelper"; import SubscriptionHelper from "@server/models/helpers/SubscriptionHelper"; import BaseEmail, { EmailProps } from "./BaseEmail"; @@ -73,14 +72,7 @@ export default class DocumentPublishedOrUpdatedEmail extends BaseEmail< }); // inline all css so that it works in as many email providers as possible. - body = content - ? await inlineCss(content, { - url: env.URL, - applyStyleTags: true, - applyLinkTags: false, - removeStyleTags: true, - }) - : undefined; + body = content ? HTMLHelper.inlineCSS(content) : undefined; } } diff --git a/server/models/helpers/HTMLHelper.ts b/server/models/helpers/HTMLHelper.ts new file mode 100644 index 000000000..eea426634 --- /dev/null +++ b/server/models/helpers/HTMLHelper.ts @@ -0,0 +1,20 @@ +import { inline } from "css-inline"; +import env from "@server/env"; + +export default class HTMLHelper { + /** + * Move CSS styles from