Issue Description
JMAP EventSource ping events report their interval value in milliseconds rather than seconds.
Stalwart converts the requested ping interval to milliseconds for the internal timer, but then serializes that converted value directly into the SSE ping payload.
For example, a 30-second ping interval is emitted at the correct time but reports:
event: ping
data: {"interval": 30000}
Expected Behavior
RFC 8620 §7.3 specifies that the interval in a ping event is in seconds.
A 30-second interval should therefore report:
event: ping
data: {"interval": 30}
Actual Behavior
The ping occurs at the correct interval, but its advertised value is multiplied by 1000.
For example, ping=30 reports 30000. In test mode, ping=1 produces:
event: ping
data: {"interval": 1000}
instead of 1.
Reproduction Steps
- Connect to the authenticated JMAP
eventSourceUrladvertised in the Session object. - Set
ping=30, for example withtypes=*andcloseafter=no. - Wait for the ping event.
- Observe that it reports
"interval": 30000rather than"interval": 30.
Relevant Log Output
No error is logged. The EventSource connection remains valid; only the protocol value in the ping event is incorrect.
Stalwart Version
v0.16.x
Installation Method
Built from source
Database Backend
RocksDB
Blob Storage
RocksDB
Search Engine
Internal
Directory Backend
Internal
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on