#17620: fix(bluebubbles): skip typing indicators when Private API is disabled
channel: bluebubbles
stale
size: XS
Cluster:
Bluebubbles iMessage Fixes
## Problem
When BlueBubbles Private API is unavailable (e.g. macOS Tahoe / macOS 26 with SIP enabled), the three typing indicator call sites in `monitor-processing.ts` fire unconditionally. Since the BlueBubbles typing endpoint requires Private API, every call fails and spams the error log with `typing restart failed` / `typing start failed` messages on every single inbound message.
The send path (`send.ts`) already correctly gates on `privateApiEnabled` via `getCachedBlueBubblesPrivateApiStatus`, but the typing indicators were missed.
## Fix
Wraps the three `sendBlueBubblesTyping` call sites in `monitor-processing.ts` with the existing `privateApiEnabled` check:
1. **`restartTypingSoon`** timer callback — typing restart between streaming blocks
2. **`onReplyStart`** — typing indicator at start of reply
3. **`finally` block** — typing stop after reply completes
When `privateApiEnabled` is `false`, typing calls are simply skipped. No behavioral change when Private API is available.
## Testing
- Tested on Mac mini running macOS Tahoe (26.0) with SIP enabled, BlueBubbles server reporting `private_api: false`
- Confirmed typing error log spam is eliminated
- Confirmed messages still send and receive correctly via AppleScript fallback
- Confirmed no change in behavior when Private API is enabled (typing indicators still work normally)
<!-- greptile_comment -->
<h3>Greptile Summary</h3>
Adds `privateApiEnabled` guard checks before three `sendBlueBubblesTyping` call sites to skip typing indicators when BlueBubbles Private API is unavailable, matching the existing pattern in `send.ts:line 347`.
- All three call sites (typing restart timer, `onReplyStart`, and `finally` block) now check `privateApiEnabled` before attempting to send typing indicators
- When Private API is disabled, typing calls are silently skipped instead of making API requests that would fail
- Eliminates error log spam on systems running macOS Tahoe / macOS 26 with SIP enabled where Private API is unavailable
- No functional change when Private API is available — typing indicators continue to work normally
- Implementation is consistent with the defensive pattern used elsewhere in the codebase
<h3>Confidence Score: 5/5</h3>
- This PR is safe to merge with no risk
- The changes are minimal, focused, and add defensive guards that only skip optional typing indicator calls when Private API is unavailable. The implementation correctly mirrors the existing pattern from `send.ts`, uses the same `getCachedBlueBubblesPrivateApiStatus` check already present in the codebase, and adds no new logic or side effects. All three guard placements are appropriate and the behavior change is purely to eliminate unnecessary API calls (and resulting error logs) when Private API is disabled, with zero functional impact when it's enabled.
- No files require special attention
<sub>Last reviewed commit: 1522505</sub>
<!-- greptile_other_comments_section -->
<sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub>
<!-- /greptile_comment -->
Most Similar PRs
#11600: fix(bluebubbles): always use private-api method for sending
by coletebou · 2026-02-08
82.5%
#11494: fix(bluebubbles): skip typing indicator for tapback messages
by mcaxtr · 2026-02-07
81.6%
#23483: fix(bluebubbles): key debounce by chat+sender instead of messageId
by saucesteals · 2026-02-22
73.5%
#15240: fix(bluebubbles): URL dropped when sent in same iMessage bubble as ...
by yinghaosang · 2026-02-13
72.6%
#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
70.6%
#19522: feat(bluebubbles): send TTS as native iMessage voice memos
by mwmacmahon · 2026-02-17
70.1%
#14429: feat(bluebubbles): handle iMessage edit events in webhook
by westhechiang · 2026-02-12
69.3%
#6546: Reply: avoid typing before text in message mode
by aldoeliacim · 2026-02-01
69.2%
#22564: fix(bluebubbles): include iMessage subject in message text
by lailoo · 2026-02-21
69.0%