Say which property a JMAP SetError rejected
"Send failed: Invalid property or value." is Stalwart's description for invalidProperties, and on its own it says nothing about what to fix. The SetError also carries a `properties` array naming the offending fields, which every call site was discarding. setErrorMessage appends them, and the 35 places that surfaced a SetError - send, save draft, mailboxes, calendars, contacts, sieve, files, signature images, sharing - now go through it.
This commit is contained in:
@@ -346,3 +346,17 @@ export function chunk<T>(arr: T[], size: number): T[][] {
|
||||
for (let i = 0; i < arr.length; i += size) out.push(arr.slice(i, i + size));
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* A readable message for a JMAP SetError.
|
||||
*
|
||||
* Servers name the offending field in `properties`, which is usually the whole
|
||||
* answer to "why was this rejected" — Stalwart's description alone is often
|
||||
* just "Invalid property or value." Keep both.
|
||||
*/
|
||||
export function setErrorMessage(err: { type: string; description?: string; properties?: string[] } | null | undefined): string {
|
||||
if (!err) return "Unknown error";
|
||||
const base = err.description ?? err.type;
|
||||
const props = err.properties?.length ? ` (${err.properties.join(", ")})` : "";
|
||||
return `${base}${props}`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user