protocol.go

  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}