feat(mail): add governed JMAP mailbox sync and search
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-08-22 17:09:05 +02:00
parent fd808336bc
commit 1cbf4acaf4
29 changed files with 2481 additions and 183 deletions
+16 -4
View File
@@ -197,7 +197,7 @@ class MailServerEndpointResponse(BaseModel):
id: str
profile_id: str
tenant_id: str | None = None
protocol: Literal["smtp", "imap", "pop3"]
protocol: Literal["smtp", "imap", "jmap", "pop3"]
name: str
config: dict[str, Any] = Field(default_factory=dict)
scope_type: MailProfileScope
@@ -214,7 +214,7 @@ class MailServerEndpointResponse(BaseModel):
class MailServerEndpointCreateRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
protocol: Literal["smtp", "imap", "pop3"]
protocol: Literal["smtp", "imap", "jmap", "pop3"]
name: str = Field(min_length=1, max_length=255)
config: dict[str, Any] = Field(default_factory=dict)
inherit_to_lower_scopes: bool | None = None
@@ -383,7 +383,7 @@ class MailContactCreateResponse(BaseModel):
class MailConnectionTestResponse(BaseModel):
ok: bool
protocol: Literal["smtp", "imap", "pop3"]
protocol: Literal["smtp", "imap", "jmap", "pop3"]
host: str | None = None
port: int | None = None
security: str | None = None
@@ -476,7 +476,7 @@ class MailImapFolderResponse(BaseModel):
class MailImapFolderListResponse(BaseModel):
ok: bool
protocol: Literal["imap"] = "imap"
protocol: Literal["imap", "jmap"] = "imap"
host: str | None = None
port: int | None = None
security: str | None = None
@@ -536,6 +536,18 @@ class MailMailboxMessageListResponse(BaseModel):
messages: list[MailMailboxMessageSummaryResponse] = Field(default_factory=list)
class MailMailboxChangesResponse(BaseModel):
profile_id: str
protocol: Literal["jmap"] = "jmap"
account_id: str
old_state: str
new_state: str
has_more_changes: bool = False
created: list[str] = Field(default_factory=list)
updated: list[str] = Field(default_factory=list)
destroyed: list[str] = Field(default_factory=list)
class MailMailboxBootstrapResponse(BaseModel):
profile_id: str
folder: str