From b6414dd1044e1f5289763294484b0cfd1e64ab70 Mon Sep 17 00:00:00 2001
From: Eana Hufwe <eana@1a23.com>
Date: Sun, 26 May 2024 16:38:04 +0000
Subject: [PATCH] fix: add space paddings to the end of JSON payload to prevent
 `esm` from padding null bytes

---
 packages/backend-rs/src/service/push_notification.rs | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/packages/backend-rs/src/service/push_notification.rs b/packages/backend-rs/src/service/push_notification.rs
index 779c382f5d..8c4342feca 100644
--- a/packages/backend-rs/src/service/push_notification.rs
+++ b/packages/backend-rs/src/service/push_notification.rs
@@ -127,7 +127,14 @@ async fn encode_mastodon_payload(
         serde_json::to_value(token.token)?,
     );
 
-    Ok(serde_json::to_string(&content)?)
+    let res = serde_json::to_string(&content)?;
+
+    // Adding space paddings to the end of JSON payload to prevent
+    // `esm` from adding null bytes payload which many Mastodon clients don’t support.
+    // https://firefish.dev/firefish/firefish/-/merge_requests/10905#note_6733
+    let padded_length = 126 + (res.len() + 1) / 128 * 128;
+    
+    Ok(format!("{:padded_length$}", res))    
 }
 
 async fn handle_web_push_failure(