#11600: fix(bluebubbles): always use private-api method for sending
channel: bluebubbles
stale
Cluster:
Bluebubbles iMessage Fixes
## Problem
The BlueBubbles plugin only sets `method: "private-api"` when sending replies or messages with effects. Without this flag, BlueBubbles falls back to AppleScript, which hangs indefinitely on macOS Tahoe (error -1700) — even when the Private API helper is connected and working.
## Fix
Always set `method: "private-api"` in the text message payload. This matches the behavior already used by the attachment send path (`attachments.ts` already hardcodes `method: "private-api"`).
## Testing
- Verified on macOS 26.2.0 with BlueBubbles Server 1.9.9
- Server reports `private_api: true`, `helper_connected: true`
- Messages send successfully with the fix; hang indefinitely without it
Closes #1911
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This change updates the BlueBubbles text-message send path (`extensions/bluebubbles/src/send.ts`) to always include `method: "private-api"` in the `/api/v1/message/text` payload, aligning it with the attachment-send path and avoiding BlueBubbles’ AppleScript fallback behavior on newer macOS versions.
The rest of the module continues to resolve a chat GUID for a target (handle/chat id/chat guid/identifier), optionally create a new DM chat when needed, and then POST the message payload via `blueBubblesFetchWithTimeout`.
<h3>Confidence Score: 5/5</h3>
- This PR is safe to merge with minimal risk.
- The change is narrowly scoped to always set a single request field (`method: "private-api"`) in the BlueBubbles text-send payload. It removes a conditional branch but does not alter endpoint selection, response handling, or chat resolution logic, and it matches existing behavior already used elsewhere for attachments.
- No files require special attention
<!-- greptile_other_comments_section -->
<!-- /greptile_comment -->
Most Similar PRs
#17620: fix(bluebubbles): skip typing indicators when Private API is disabled
by Kerr1st · 2026-02-16
82.5%
#23483: fix(bluebubbles): key debounce by chat+sender instead of messageId
by saucesteals · 2026-02-22
76.5%
#16304: fix(bluebubbles): accept webhook message fields at top level
by MisterGuy420 · 2026-02-14
75.7%
#15240: fix(bluebubbles): URL dropped when sent in same iMessage bubble as ...
by yinghaosang · 2026-02-13
75.2%
#19522: feat(bluebubbles): send TTS as native iMessage voice memos
by mwmacmahon · 2026-02-17
75.0%
#22564: fix(bluebubbles): include iMessage subject in message text
by lailoo · 2026-02-21
73.0%
#21174: fix(bluebubbles): trim leading newlines from message text
by cosmopax · 2026-02-19
72.3%
#16327: fix(bluebubbles): enforce dmPolicy for DMs; block unknown senders w...
by saurav470 · 2026-02-14
71.1%
#14429: feat(bluebubbles): handle iMessage edit events in webhook
by westhechiang · 2026-02-12
71.1%
#11494: fix(bluebubbles): skip typing indicator for tapback messages
by mcaxtr · 2026-02-07
69.9%