mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-10-31 00:12:39 +00:00
Stalwart refuses a push subscription's whole emailPush map as `forbidden` when it names a mailbox shared by ACL (0.16.16 and later, and 1.0). Bulwark put every account with mailboxes in the map, so enabling push showed raw JSON, and the background re-sync destroyed the working subscription after its refresh was refused and dropped its key: push stopped without a word and could not be turned back on while the share existed. A network error, a timeout or rate limiting during the refresh ended it the same way. - The map holds the primary account and the accounts that list `urn:ietf:params:jmap:emailpush`, which 1.0 leaves off ACL shares. 0.16 lists it everywhere, so a refused map narrows to the accounts that look owned, then to the primary account, as the mobile app does. Refused accounts are remembered under `bulwark.push.emailPushRefused.v1.<id>`; Re-register and disable clear the list. - A subscription ends only when a verified replacement exists, the user turns push off, or the server no longer has it. The old record is destroyed after the new one is verified. A failed listing, a network error or a refused method call leave it and its key alone. - PushSubscription/set failures throw typed errors (`jmapSetError` for a refused object, `jmapError` for a refused call) instead of JSON in the message or `false`, and the client exposes `getAccountInfo`. - Settings says that mailboxes others share don't send background notifications, and `forbidden` and `overQuota` read as plain text in settings and the onboarding prompt.