Skip to content

v1.2.1

Choose a tag to compare

@crnst8 crnst8 released this 26 Aug 03:56
· 18 commits to main since this release

fix: honour imapflow command results so read marks survive sync

imapflow answers a refused STORE/MOVE/COPY/EXPUNGE with false rather than
throwing. Replay ignored that and deleted the sync_ops row anyway, which also
removed the guard in envelopes.ts that holds local flag state while a change is
in flight, so the next envelope pass wrote the server's still-unread flag back
over the read. Mail marked read came back unread seconds later and survived a
reload; the sidebar counts followed it.

Replay now fails the op on a falsy result, so it retries and then parks with the
server's own words while the guard keeps what the user did. A mailbox whose
PERMANENTFLAGS will not keep \Seen is refused up front instead of eight silent
retries. pool.ts swaps logger: false for a logger that remembers only the
refusal text, since that was the sole channel for the server's reason.

Adds replay.test.ts covering the return-value handling.