Summary
The BlueBubbles channel plugin uses a hardcoded 10-second timeout (DEFAULT_TIMEOUT_MS = 1e4) for all HTTP requests, including message sends via /api/v1/message/text. On macOS 26 (Tahoe), BlueBubbles Private API sends intermittently stall for 60-124 seconds due to iMessage framework delays. The aggressive 10s timeout causes these sends to be permanently lost — the request is aborted before BB can complete it, even though it would eventually succeed.
Problem
DEFAULT_TIMEOUT_MS is defined in extensions/bluebubbles/src/types.ts as 1e4 (10 seconds)
blueBubblesFetchWithTimeout() uses this as the default when timeoutMs is not passed
- All outbound message sends —
sendText (outbound adapter at api.js:1090), chunked outbound (channel.runtime:1794), and sendMessageBlueBubbles() itself — call through without passing timeoutMs
- The BB config schema (
BlueBubblesChannelConfigSchema) has no sendTimeoutMs or similar field
- There is no way for operators to tune this value
Environment
- OpenClaw: 2026.4.11
- macOS: 26.3.1 (Tahoe)
- BlueBubbles Server: 1.9.9
- Private API: enabled (DYLIB injection, SIP disabled)
Observed behavior
BlueBubbles Private API sends on macOS 26 intermittently take 60-124 seconds to complete (iMessage framework stall). OpenClaw aborts these at 10s. The send is lost — no retry, no user-visible error in most outbound paths.
Expected behavior
A configurable timeout for BB API requests, especially message sends. Suggested config shape:
{
"plugins": {
"entries": {
"bluebubbles": {
"config": {
"accounts": {
"default": {
"sendTimeoutMs": 45000
}
}
}
}
}
}
}
Or a simpler top-level apiTimeoutMs / sendTimeoutMs field in the BB account config schema.
Workaround
None currently. The timeout is not configurable and not exposed in any config path.
Code references
DEFAULT_TIMEOUT_MS = 1e4 → dist/monitor-normalize-*.js:20 (source: extensions/bluebubbles/src/types.ts)
blueBubblesFetchWithTimeout(url, init, timeoutMs = DEFAULT_TIMEOUT_MS, ssrfPolicy) → same file
sendMessageBlueBubbles() passes opts.timeoutMs through but all callers omit it → dist/reactions-*.js:362
- Outbound
sendText omits timeoutMs → dist/extensions/bluebubbles/api.js:1090
- Chunked outbound omits
timeoutMs → dist/channel.runtime-*.js:1794
- Config schema has no timeout field →
dist/config-schema-*.js:40
Summary
The BlueBubbles channel plugin uses a hardcoded 10-second timeout (
DEFAULT_TIMEOUT_MS = 1e4) for all HTTP requests, including message sends via/api/v1/message/text. On macOS 26 (Tahoe), BlueBubbles Private API sends intermittently stall for 60-124 seconds due to iMessage framework delays. The aggressive 10s timeout causes these sends to be permanently lost — the request is aborted before BB can complete it, even though it would eventually succeed.Problem
DEFAULT_TIMEOUT_MSis defined inextensions/bluebubbles/src/types.tsas1e4(10 seconds)blueBubblesFetchWithTimeout()uses this as the default whentimeoutMsis not passedsendText(outbound adapter atapi.js:1090), chunked outbound (channel.runtime:1794), andsendMessageBlueBubbles()itself — call through without passingtimeoutMsBlueBubblesChannelConfigSchema) has nosendTimeoutMsor similar fieldEnvironment
Observed behavior
BlueBubbles Private API sends on macOS 26 intermittently take 60-124 seconds to complete (iMessage framework stall). OpenClaw aborts these at 10s. The send is lost — no retry, no user-visible error in most outbound paths.
Expected behavior
A configurable timeout for BB API requests, especially message sends. Suggested config shape:
{ "plugins": { "entries": { "bluebubbles": { "config": { "accounts": { "default": { "sendTimeoutMs": 45000 } } } } } } }Or a simpler top-level
apiTimeoutMs/sendTimeoutMsfield in the BB account config schema.Workaround
None currently. The timeout is not configurable and not exposed in any config path.
Code references
DEFAULT_TIMEOUT_MS = 1e4→dist/monitor-normalize-*.js:20(source:extensions/bluebubbles/src/types.ts)blueBubblesFetchWithTimeout(url, init, timeoutMs = DEFAULT_TIMEOUT_MS, ssrfPolicy)→ same filesendMessageBlueBubbles()passesopts.timeoutMsthrough but all callers omit it →dist/reactions-*.js:362sendTextomitstimeoutMs→dist/extensions/bluebubbles/api.js:1090timeoutMs→dist/channel.runtime-*.js:1794dist/config-schema-*.js:40