diff --git a/Common/Types/Email/EmailTemplateType.ts b/Common/Types/Email/EmailTemplateType.ts index 9092f3f719..c219d0e282 100644 --- a/Common/Types/Email/EmailTemplateType.ts +++ b/Common/Types/Email/EmailTemplateType.ts @@ -13,7 +13,7 @@ enum EmailTemplateType { StatusPageForgotPassword = 'StatusPageForgotPassword.hbs', StatusPagePasswordChanged = 'StatusPagePasswordChanged.hbs', StatusPageWelcomeEmail = 'StatusPageWelcomeEmail.hbs', - SubscriberScheduledMaintenanceEventNoteCreated = 'SubscriberScheduledMaintenanceEventCreated.hbs', + SubscriberScheduledMaintenanceEventNoteCreated = 'SubscriberScheduledMaintenanceEventNoteCreated.hbs', } export default EmailTemplateType; diff --git a/CommonUI/src/Components/Markdown.tsx/MarkdownViewer.tsx b/CommonUI/src/Components/Markdown.tsx/MarkdownViewer.tsx index df8d14696c..93442d128e 100644 --- a/CommonUI/src/Components/Markdown.tsx/MarkdownViewer.tsx +++ b/CommonUI/src/Components/Markdown.tsx/MarkdownViewer.tsx @@ -19,19 +19,19 @@ const MarkdownViewer: FunctionComponent = ( components={{ // because tailwind does not supply

styles https://tailwindcss.com/docs/preflight#headings-are-unstyled h1: ({ ...props }: any) => { - return

; + return

; }, h2: ({ ...props }: any) => { - return

; + return

; }, h3: ({ ...props }: any) => { - return

; + return

; }, h4: ({ ...props }: any) => { - return

; + return

; }, h5: ({ ...props }: any) => { - return

; + return

; }, h6: ({ ...props }: any) => { return

; diff --git a/Mail/Templates/SubscriberIncidentNoteCreated.hbs b/Mail/Templates/SubscriberIncidentNoteCreated.hbs index 5976a5ca29..a820f9a9f5 100644 --- a/Mail/Templates/SubscriberIncidentNoteCreated.hbs +++ b/Mail/Templates/SubscriberIncidentNoteCreated.hbs @@ -453,9 +453,13 @@ Resources Affected: {{resourcesAffected}}

-

- Note: {{note}}

+ Note:

+ +

+ {{{note}}} +

diff --git a/Mail/Templates/SubscriberScheduledMaintenanceEventCreated.hbs b/Mail/Templates/SubscriberScheduledMaintenanceEventCreated.hbs index b57fb784ed..645525e182 100644 --- a/Mail/Templates/SubscriberScheduledMaintenanceEventCreated.hbs +++ b/Mail/Templates/SubscriberScheduledMaintenanceEventCreated.hbs @@ -442,11 +442,11 @@ {{eventTitle}}

- Description: {{eventDescription}}

+ Event Description: {{eventDescription}}

- Status: {{eventStatus}}

+ Event Status: {{eventStatus}}

@@ -454,7 +454,7 @@

- Event At: {{scheduledAt}}

+ Event Scheduled At: {{scheduledAt}}

diff --git a/Mail/Templates/SubscriberScheduledMaintenanceEventNoteCreated.hbs b/Mail/Templates/SubscriberScheduledMaintenanceEventNoteCreated.hbs index a570420263..bfa3199f6a 100644 --- a/Mail/Templates/SubscriberScheduledMaintenanceEventNoteCreated.hbs +++ b/Mail/Templates/SubscriberScheduledMaintenanceEventNoteCreated.hbs @@ -442,7 +442,7 @@ {{eventTitle}}

- Description: {{eventDescription}}

+ Event Description: {{eventDescription}}

- Note: {{note}}

+ Note:

+ +

+ {{{note}}} +

diff --git a/Workers/package-lock.json b/Workers/package-lock.json index df2b4b59eb..643549092d 100644 --- a/Workers/package-lock.json +++ b/Workers/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@greenlock/manager": "^3.1.0", "@root/greenlock": "^4.0.5", + "@types/markdown-it": "^12.2.3", "@types/node-cron": "^3.0.4", "acme-http-01-standalone": "^3.0.5", "axios": "^1.2.1", @@ -18,6 +19,7 @@ "CommonServer": "file:../CommonServer", "greenlock": "^4.0.4", "greenlock-store-fs": "^3.2.2", + "markdown-it": "^13.0.1", "Model": "file:../Model", "node-cron": "^3.0.2" }, @@ -72,7 +74,11 @@ "@types/ejs": "^3.1.1", "@types/gridfs-stream": "^0.5.35", "@types/json2csv": "^5.0.3", + "@types/markdown-it": "^12.2.3", + "@types/nodemailer": "^6.4.7", "airtable": "^0.11.3", + "axios": "^1.3.3", + "bullmq": "^3.6.6", "Common": "file:../Common", "cors": "^2.8.5", "dotenv": "^16.0.0", @@ -82,6 +88,7 @@ "handlebars": "^4.7.7", "json2csv": "^5.0.7", "jsonwebtoken": "^9.0.0", + "markdown-it": "^13.0.1", "Model": "file:../Model", "node-device-detector": "^2.0.0", "nodemailer": "^6.7.3", @@ -92,6 +99,7 @@ "stripe": "^10.17.0", "typeorm": "^0.3.10", "typeorm-extension": "^2.2.13", + "vm2": "^3.9.14", "winston": "^3.6.0" }, "devDependencies": { @@ -99,7 +107,7 @@ "@types/cors": "^2.8.12", "@types/express": "^4.17.13", "@types/jest": "^27.4.1", - "@types/jsonwebtoken": "^8.5.8", + "@types/jsonwebtoken": "^8.5.9", "@types/node": "^17.0.22", "jest": "^27.5.1", "ts-jest": "^27.1.4" @@ -1320,6 +1328,25 @@ "pretty-format": "^27.0.0" } }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "node_modules/@types/node": { "version": "17.0.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", @@ -1954,6 +1981,17 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3562,6 +3600,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -3622,6 +3668,31 @@ "tmpl": "1.0.5" } }, + "node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4551,6 +4622,11 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -5713,6 +5789,25 @@ "pretty-format": "^27.0.0" } }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/node": { "version": "17.0.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", @@ -6127,9 +6222,13 @@ "@types/gridfs-stream": "^0.5.35", "@types/jest": "^27.4.1", "@types/json2csv": "^5.0.3", - "@types/jsonwebtoken": "^8.5.8", + "@types/jsonwebtoken": "^8.5.9", + "@types/markdown-it": "^12.2.3", "@types/node": "^17.0.22", + "@types/nodemailer": "^6.4.7", "airtable": "^0.11.3", + "axios": "^1.3.3", + "bullmq": "^3.6.6", "Common": "file:../Common", "cors": "^2.8.5", "dotenv": "^16.0.0", @@ -6140,6 +6239,7 @@ "jest": "^27.5.1", "json2csv": "^5.0.7", "jsonwebtoken": "^9.0.0", + "markdown-it": "^13.0.1", "Model": "file:../Model", "node-device-detector": "^2.0.0", "nodemailer": "^6.7.3", @@ -6151,6 +6251,7 @@ "ts-jest": "^27.1.4", "typeorm": "^0.3.10", "typeorm-extension": "^2.2.13", + "vm2": "^3.9.14", "winston": "^3.6.0" } }, @@ -6245,6 +6346,11 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -7467,6 +7573,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -7515,6 +7629,30 @@ "tmpl": "1.0.5" } }, + "markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "requires": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8176,6 +8314,11 @@ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", diff --git a/Workers/package.json b/Workers/package.json index c90e685813..b046a55e60 100644 --- a/Workers/package.json +++ b/Workers/package.json @@ -16,6 +16,7 @@ "dependencies": { "@greenlock/manager": "^3.1.0", "@root/greenlock": "^4.0.5", + "@types/markdown-it": "^12.2.3", "@types/node-cron": "^3.0.4", "acme-http-01-standalone": "^3.0.5", "axios": "^1.2.1", @@ -23,6 +24,7 @@ "CommonServer": "file:../CommonServer", "greenlock": "^4.0.4", "greenlock-store-fs": "^3.2.2", + "markdown-it": "^13.0.1", "Model": "file:../Model", "node-cron": "^3.0.2" }, diff --git a/Workflow/Services/QueueWorkflow.ts b/Workflow/Services/QueueWorkflow.ts index 9a4781d66f..e915e13389 100644 --- a/Workflow/Services/QueueWorkflow.ts +++ b/Workflow/Services/QueueWorkflow.ts @@ -13,7 +13,6 @@ import QueryHelper from 'CommonServer/Types/Database/QueryHelper'; import WorkflowPlan from 'Common/Types/Workflow/WorkflowPlan'; import PositiveNumber from 'Common/Types/PositiveNumber'; import { PlanSelect } from 'Common/Types/Billing/SubscriptionPlan'; -import { Job } from 'bullmq'; export default class QueueWorkflow { public static async removeWorkflow(workflowId: ObjectID): Promise { @@ -173,7 +172,7 @@ export default class QueueWorkflow { }); } - const job: Job = await Queue.addJob( + const job: any = await Queue.addJob( QueueName.Workflow, workflowLog ? workflowLog._id?.toString()!