1package daemonrpc
2
3import udsrpc "github.com/floatpane/go-uds-jsonrpc"
4
5// Wire-level message types and the discriminating decoder live in the shared
6// go-uds-jsonrpc library. They are aliased here so matcha code keeps using the
7// daemonrpc.* names while sharing a single implementation with the daemon's
8// transport layer.
9type (
10 Request = udsrpc.Request
11 Response = udsrpc.Response
12 Event = udsrpc.Event
13 Error = udsrpc.Error
14 Message = udsrpc.Message
15)
16
17// DecodeMessage discriminates a raw JSON object into a Request, Response, or
18// Event.
19var DecodeMessage = udsrpc.DecodeMessage
20
21// Standard error codes, re-exported from the shared library.
22const (
23 ErrCodeParse = udsrpc.ErrCodeParse
24 ErrCodeInvalidReq = udsrpc.ErrCodeInvalidReq
25 ErrCodeInvalidParams = udsrpc.ErrCodeInvalidParams
26 ErrCodeNotFound = udsrpc.ErrCodeNotFound
27 ErrCodeInternal = udsrpc.ErrCodeInternal
28)
29
30// RPC method names.
31const (
32 MethodPing = "Ping"
33 MethodGetStatus = "GetStatus"
34 MethodGetAccounts = "GetAccounts"
35 MethodReloadConfig = "ReloadConfig"
36 MethodFetchEmails = "FetchEmails"
37 MethodFetchEmailBody = "FetchEmailBody"
38 MethodSendEmail = "SendEmail"
39 MethodDeleteEmails = "DeleteEmails"
40 MethodArchiveEmails = "ArchiveEmails"
41 MethodMoveEmails = "MoveEmails"
42 MethodMarkRead = "MarkRead"
43 MethodFetchFolders = "FetchFolders"
44 MethodRefreshFolder = "RefreshFolder"
45 MethodSubscribe = "Subscribe"
46 MethodUnsubscribe = "Unsubscribe"
47 MethodSendRSVP = "SendRSVP"
48 MethodGetCachedEmails = "GetCachedEmails"
49 MethodGetCachedBody = "GetCachedBody"
50 MethodExportContacts = "ExportContacts"
51 MethodQueueEmail = "QueueEmail"
52 MethodCancelEmail = "CancelEmail"
53)
54
55// Event type names.
56const (
57 EventNewMail = "NewMail"
58 EventSyncStarted = "SyncStarted"
59 EventSyncComplete = "SyncComplete"
60 EventSyncError = "SyncError"
61 EventEmailsUpdated = "EmailsUpdated"
62 EventConfigReloaded = "ConfigReloaded"
63)
64
65// Param/result types for RPC methods.
66
67type PingResult struct {
68 Pong bool `json:"pong"`
69}
70
71type StatusResult struct {
72 Running bool `json:"running"`
73 Uptime int64 `json:"uptime_seconds"`
74 Accounts []string `json:"accounts"`
75 PID int `json:"pid"`
76}
77
78type AccountInfo struct {
79 ID string `json:"id"`
80 Name string `json:"name"`
81 Email string `json:"email"`
82 Protocol string `json:"protocol"`
83}
84
85type FetchEmailsParams struct {
86 AccountID string `json:"account_id"`
87 Folder string `json:"folder"`
88 Limit uint32 `json:"limit"`
89 Offset uint32 `json:"offset"`
90}
91
92type FetchEmailBodyParams struct {
93 AccountID string `json:"account_id"`
94 Folder string `json:"folder"`
95 UID uint32 `json:"uid"`
96}
97
98type QueueEmailParams struct {
99 Email SendEmailParams `json:"email"`
100 DelaySeconds int `json:"delay_seconds"`
101}
102
103type QueueEmailResult struct {
104 JobID string `json:"job_id"`
105}
106
107type CancelEmailParams struct {
108 JobID string `json:"job_id"`
109}
110
111type FetchEmailBodyResult struct {
112 Body string `json:"body"`
113 BodyMIMEType string `json:"body_mime_type,omitempty"`
114 Attachments []AttachmentInfo `json:"attachments"`
115}
116
117type AttachmentInfo struct {
118 Filename string `json:"filename"`
119 PartID string `json:"part_id"`
120 Encoding string `json:"encoding"`
121 MIMEType string `json:"mime_type"`
122 IsCalendarInvite bool `json:"is_calendar_invite,omitempty"`
123 CalendarData []byte `json:"calendar_data,omitempty"`
124}
125
126type SendEmailParams struct {
127 AccountID string `json:"account_id"`
128 To []string `json:"to"`
129 Cc []string `json:"cc,omitempty"`
130 Bcc []string `json:"bcc,omitempty"`
131 Subject string `json:"subject"`
132 Body string `json:"body"`
133 HTMLBody string `json:"html_body,omitempty"`
134 Images map[string][]byte `json:"images,omitempty"`
135 Attachments map[string][]byte `json:"attachments,omitempty"`
136 InReplyTo string `json:"in_reply_to,omitempty"`
137 References []string `json:"references,omitempty"`
138 SignSMIME bool `json:"sign_smime,omitempty"`
139 EncryptSMIME bool `json:"encrypt_smime,omitempty"`
140 SignPGP bool `json:"sign_pgp,omitempty"`
141 EncryptPGP bool `json:"encrypt_pgp,omitempty"`
142}
143
144type DeleteEmailsParams struct {
145 AccountID string `json:"account_id"`
146 Folder string `json:"folder"`
147 UIDs []uint32 `json:"uids"`
148}
149
150type ArchiveEmailsParams struct {
151 AccountID string `json:"account_id"`
152 Folder string `json:"folder"`
153 UIDs []uint32 `json:"uids"`
154}
155
156type MoveEmailsParams struct {
157 AccountID string `json:"account_id"`
158 UIDs []uint32 `json:"uids"`
159 SourceFolder string `json:"source_folder"`
160 DestFolder string `json:"dest_folder"`
161}
162
163type MarkReadParams struct {
164 AccountID string `json:"account_id"`
165 Folder string `json:"folder"`
166 UIDs []uint32 `json:"uids"`
167 Read bool `json:"read"`
168}
169
170type FetchFoldersParams struct {
171 AccountID string `json:"account_id"`
172}
173
174type RefreshFolderParams struct {
175 AccountID string `json:"account_id"`
176 Folder string `json:"folder"`
177}
178
179type SubscribeParams struct {
180 AccountID string `json:"account_id"`
181 Folder string `json:"folder"`
182}
183
184type UnsubscribeParams struct {
185 AccountID string `json:"account_id"`
186 Folder string `json:"folder"`
187}
188
189type SendRSVPParams struct {
190 AccountID string `json:"account_id"`
191 OriginalICS []byte `json:"original_ics"`
192 Response string `json:"response"`
193 InReplyTo string `json:"in_reply_to,omitempty"`
194 References []string `json:"references,omitempty"`
195}
196
197type GetCachedEmailsParams struct {
198 Folder string `json:"folder"`
199}
200
201type GetCachedBodyParams struct {
202 Folder string `json:"folder"`
203 UID uint32 `json:"uid"`
204 AccountID string `json:"account_id"`
205}
206
207type ExportContactsParams struct {
208 Format string `json:"format"` // "json" or "csv"
209}
210
211// Event data types.
212
213type NewMailEvent struct {
214 AccountID string `json:"account_id"`
215 Folder string `json:"folder"`
216}
217
218type SyncStartedEvent struct {
219 AccountID string `json:"account_id"`
220 Folder string `json:"folder"`
221}
222
223type SyncCompleteEvent struct {
224 AccountID string `json:"account_id"`
225 Folder string `json:"folder"`
226 EmailCount int `json:"email_count"`
227}
228
229type SyncErrorEvent struct {
230 AccountID string `json:"account_id"`
231 Folder string `json:"folder"`
232 Error string `json:"error"`
233}