From 7a90abeaec1332400432b7e9fa54b1532345094e Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Thu, 2 May 2024 13:53:10 -1000 Subject: [PATCH] fix: :art: Switch from happy-dom to jsdom for HTML sanitization --- bun.lockb | Bin 142228 -> 155708 bytes package.json | 211 +++++++++++++++++++++--------------------- utils/sanitization.ts | 15 ++- 3 files changed, 111 insertions(+), 115 deletions(-) diff --git a/bun.lockb b/bun.lockb index fa34078a396222c0d5d7951f2ed1765572569375..2394ebc0279e887ef8a7ca8c1ee47db8ace8338e 100755 GIT binary patch delta 29298 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 bv;&_5woJD4o00hKNIoHjbKUt{PMxZ5 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 { - const sanitizedHtml = purifier.sanitize(html, { +export const sanitizeHtml = async ( + html: string, + extraConfig?: DOMPurify.Config, +) => { + const sanitizedHtml = DOMPurify.sanitize(html, { ALLOWED_TAGS: [ "a", "p",