diff --git a/wasm/dm.go b/wasm/dm.go
index 101ce92bdb36884069e3c71e6bc63074828a0d9d..53d123a26c3f92743f9868e03017e7c1858ca9bb 100644
--- a/wasm/dm.go
+++ b/wasm/dm.go
@@ -63,6 +63,10 @@ func newDMClientJS(api *bindings.DMClient) map[string]any {
 		"SendReaction": js.FuncOf(cm.SendReaction),
 		"SendSilent":   js.FuncOf(cm.SendSilent),
 		"Send":         js.FuncOf(cm.Send),
+
+		// User Mute/Unmute
+		"BlockSender":   js.FuncOf(cm.BlockSender),
+		"UnblockSender": js.FuncOf(cm.UnblockSender),
 	}
 
 	return dmClientMap
@@ -572,6 +576,30 @@ func (dmc *DMClient) GetDatabaseName(js.Value, []js.Value) any {
 		"_speakeasy_dm"
 }
 
+// BlockSender blocks the provided sender public key from sending DMs
+//
+// Parameters:
+//   - args[0] - [ed25519.PublicKey] (Uint8Array)
+//
+// Returns nothing
+func (dmc *DMClient) BlockSender(_ js.Value, args []js.Value) any {
+	senderKey := utils.CopyBytesToGo(args[0])
+	dmc.api.BlockSender(senderKey)
+	return nil
+}
+
+// UnblockSender unblocks the provided sender public key to allow sending DMs
+//
+// Parameters:
+//   - args[0] - [ed25519.PublicKey] (Uint8Array)
+//
+// Returns nothing
+func (dmc *DMClient) UnblockSender(_ js.Value, args []js.Value) any {
+	senderKey := utils.CopyBytesToGo(args[0])
+	dmc.api.UnblockSender(senderKey)
+	return nil
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // DM Share URL                                                          //
 ////////////////////////////////////////////////////////////////////////////////