Every way of deleting mail for good (JMAP, IMAP expunge, POP3, Trash emptying, mailbox removal) notes the message's mailboxes and keywords while archiving is on, fixing its deadline then; when its data is finally removed it becomes an x:ArchivedItem record, written as upstream writes them, with its copy held until the deadline. Retention is read at deletion time, so a change applies at once. Restore puts a message back in the mailboxes it was in (Trash only if that was all), with its keywords, and removes the record; over quota it stays archived. x:ArchivedItem/get returns status and accountId; query filters on type, archivedAt and text; set requests a restore once or destroys; /changes is a fork addition. Expired items go in the data purge. The shared account-access rule moves to jmap::inbuxa::access. system_tests now calls undelete::test, and the archiving gate is gone.
21 lines
625 B
TOML
21 lines
625 B
TOML
[package]
|
|
name = "inbuxa-features"
|
|
description = "INBUXA's rebuilt features: behavior Stalwart ships only in its Enterprise Edition, rebuilt clean-room"
|
|
license = "AGPL-3.0-only"
|
|
version = "0.16.22"
|
|
edition = "2024"
|
|
|
|
[dependencies]
|
|
registry = { path = "../registry" }
|
|
jmap_proto = { path = "../jmap-proto" }
|
|
store = { path = "../store" }
|
|
trc = { path = "../trc" }
|
|
types = { path = "../types" }
|
|
utils = { path = "../utils" }
|
|
ahash = { version = "0.8.12", features = ["serde"] }
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
|
|
[dev-dependencies]
|
|
tokio = { version = "1.53", features = ["macros", "rt"] }
|