@diskd-ai/email-client-mcp 0.1.21 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/config/schema.d.ts +112 -0
  2. package/dist/config/schema.js +30 -0
  3. package/dist/config/schema.js.map +1 -1
  4. package/dist/domain/errors.d.ts +2 -0
  5. package/dist/domain/errors.js +18 -0
  6. package/dist/domain/errors.js.map +1 -1
  7. package/dist/imap/fetch.d.ts +14 -1
  8. package/dist/imap/fetch.js +58 -4
  9. package/dist/imap/fetch.js.map +1 -1
  10. package/dist/imap/mapper.js +12 -2
  11. package/dist/imap/mapper.js.map +1 -1
  12. package/dist/server.js +31 -3
  13. package/dist/server.js.map +1 -1
  14. package/dist/store/payloadTypes.d.ts +15 -2
  15. package/dist/sync/attachmentHydration.d.ts +44 -0
  16. package/dist/sync/attachmentHydration.js +118 -0
  17. package/dist/sync/attachmentHydration.js.map +1 -0
  18. package/dist/sync/bodyHydration.d.ts +52 -0
  19. package/dist/sync/bodyHydration.js +103 -0
  20. package/dist/sync/bodyHydration.js.map +1 -0
  21. package/dist/sync/sync.d.ts +14 -5
  22. package/dist/sync/sync.js +254 -96
  23. package/dist/sync/sync.js.map +1 -1
  24. package/dist/sync/watcher.d.ts +7 -0
  25. package/dist/sync/watcher.js +9 -0
  26. package/dist/sync/watcher.js.map +1 -1
  27. package/dist/tools/registry.d.ts +4 -0
  28. package/dist/tools/registry.js +10 -0
  29. package/dist/tools/registry.js.map +1 -1
  30. package/dist/tools/systemHydrateEmailAttachment.d.ts +26 -0
  31. package/dist/tools/systemHydrateEmailAttachment.js +13 -0
  32. package/dist/tools/systemHydrateEmailAttachment.js.map +1 -0
  33. package/dist/tools/systemHydrateEmailBodies.d.ts +40 -0
  34. package/dist/tools/systemHydrateEmailBodies.js +21 -0
  35. package/dist/tools/systemHydrateEmailBodies.js.map +1 -0
  36. package/package.json +1 -1
package/dist/sync/sync.js CHANGED
@@ -21,24 +21,49 @@ import { isOAuthAccount } from "../config/schema.js";
21
21
  import { errorMessage, imapError } from "../domain/errors.js";
22
22
  import { Err } from "../domain/result.js";
23
23
  import { toStoredPayload } from "../imap/mapper.js";
24
- import { patchAttachmentStorageRef, withAttachmentId, } from "../store/attachments.js";
25
24
  import { externalIdFor, sanitizeMailboxId } from "../store/conventions.js";
25
+ import { hydrateStoredMessageBodies } from "./bodyHydration.js";
26
26
  const BATCH_SIZE = 50;
27
27
  const parseSyncState = (raw) => {
28
28
  if (raw === null)
29
29
  return null;
30
30
  const uv = raw.uidValidity;
31
31
  const un = raw.uidNext;
32
- const ls = raw.lastSyncedUid;
33
- if (typeof uv !== "number" || typeof un !== "number" || typeof ls !== "number")
32
+ if (typeof uv !== "number" || typeof un !== "number")
33
+ return null;
34
+ const forward = raw.forwardSyncedUid;
35
+ if (typeof forward === "number") {
36
+ const backfill = raw.backfillBeforeUid;
37
+ const lastSyncedUid = typeof raw.lastSyncedUid === "number" ? raw.lastSyncedUid : forward;
38
+ return {
39
+ source: "v2",
40
+ state: {
41
+ uidValidity: uv,
42
+ uidNext: un,
43
+ forwardSyncedUid: forward,
44
+ backfillBeforeUid: typeof backfill === "number" ? backfill : null,
45
+ lastSyncedUid,
46
+ lastSyncStartedAt: typeof raw.lastSyncStartedAt === "string" ? raw.lastSyncStartedAt : null,
47
+ lastSyncFinishedAt: typeof raw.lastSyncFinishedAt === "string" ? raw.lastSyncFinishedAt : null,
48
+ lastSyncError: typeof raw.lastSyncError === "string" ? raw.lastSyncError : null,
49
+ },
50
+ };
51
+ }
52
+ const legacyLastSynced = raw.lastSyncedUid;
53
+ if (typeof legacyLastSynced !== "number")
34
54
  return null;
35
55
  return {
36
- uidValidity: uv,
37
- uidNext: un,
38
- lastSyncedUid: ls,
39
- lastSyncStartedAt: typeof raw.lastSyncStartedAt === "string" ? raw.lastSyncStartedAt : null,
40
- lastSyncFinishedAt: typeof raw.lastSyncFinishedAt === "string" ? raw.lastSyncFinishedAt : null,
41
- lastSyncError: typeof raw.lastSyncError === "string" ? raw.lastSyncError : null,
56
+ source: "legacy",
57
+ state: {
58
+ uidValidity: uv,
59
+ uidNext: un,
60
+ forwardSyncedUid: legacyLastSynced,
61
+ backfillBeforeUid: null,
62
+ lastSyncedUid: legacyLastSynced,
63
+ lastSyncStartedAt: typeof raw.lastSyncStartedAt === "string" ? raw.lastSyncStartedAt : null,
64
+ lastSyncFinishedAt: typeof raw.lastSyncFinishedAt === "string" ? raw.lastSyncFinishedAt : null,
65
+ lastSyncError: typeof raw.lastSyncError === "string" ? raw.lastSyncError : null,
66
+ },
42
67
  };
43
68
  };
44
69
  const range = (lo, hi) => {
@@ -49,6 +74,14 @@ const range = (lo, hi) => {
49
74
  }
50
75
  return out;
51
76
  };
77
+ const descendingRange = (lo, hi) => {
78
+ const out = [];
79
+ for (let to = hi; to >= lo; to -= BATCH_SIZE) {
80
+ const from = Math.max(lo, to - BATCH_SIZE + 1);
81
+ out.push([from, to]);
82
+ }
83
+ return out;
84
+ };
52
85
  const mergeReconciledFlags = (existing, incoming) => {
53
86
  if (existing === null)
54
87
  return incoming;
@@ -59,19 +92,57 @@ const mergeReconciledFlags = (existing, incoming) => {
59
92
  fetchedAt: incoming.fetchedAt,
60
93
  };
61
94
  };
95
+ const isAllMailFolder = (folderPath, specialUse) => specialUse === "\\All" || /(?:^|\/)All Mail$/i.test(folderPath);
96
+ const bodyHydrationEnabledForFolder = (watcher, folderPath, specialUse) => {
97
+ const settings = watcher.body_hydration;
98
+ if (settings.enabled !== true || settings.max_messages_per_tick <= 0)
99
+ return false;
100
+ if (settings.skip_all_mail && isAllMailFolder(folderPath, specialUse))
101
+ return false;
102
+ return true;
103
+ };
104
+ const folderPriority = (folderPath, specialUse) => {
105
+ const normalized = folderPath.toLowerCase();
106
+ if (specialUse === "\\Inbox" || normalized === "inbox")
107
+ return 0;
108
+ if (specialUse === "\\Sent" || /(?:^|\/)sent$/i.test(folderPath))
109
+ return 1;
110
+ if (specialUse === "\\Flagged" || /(?:^|\/)(important|starred)$/i.test(folderPath)) {
111
+ return 2;
112
+ }
113
+ if (isAllMailFolder(folderPath, specialUse))
114
+ return 5;
115
+ return 4;
116
+ };
117
+ const sortFoldersByPriority = (folders) => folders
118
+ .map((folder, index) => ({ folder, index }))
119
+ .sort((a, b) => {
120
+ const byPriority = folderPriority(a.folder.path, a.folder.specialUse) -
121
+ folderPriority(b.folder.path, b.folder.specialUse);
122
+ if (byPriority !== 0)
123
+ return byPriority;
124
+ return a.index - b.index;
125
+ })
126
+ .map(({ folder }) => folder);
62
127
  /**
63
128
  * Sync one folder. Returns the per-folder report; never throws.
64
129
  * `lastSyncedUid` is advanced only after each successful batch upsert.
65
130
  */
66
- const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
131
+ const syncFolder = async (deps, account, mailboxId, folderPath, specialUse, watcher) => {
67
132
  const folderId = folderPath;
68
133
  const startIso = deps.now().toISOString();
134
+ const flagWindow = watcher.flag_reconcile_window;
135
+ const bodyHydrationCandidates = [];
136
+ let hydratedBodies = 0;
137
+ let bodyHydrationErrors = 0;
69
138
  const statusR = await deps.imap.folderStatus(account.name, folderPath);
70
139
  if (statusR.tag === "Err") {
71
140
  return {
72
141
  folderId,
73
142
  newMessages: 0,
74
143
  reconciledFlags: 0,
144
+ hydratedBodies: 0,
145
+ bodyHydrationErrors: 0,
75
146
  uidValidityRolled: false,
76
147
  error: errorMessage(statusR.error),
77
148
  };
@@ -83,12 +154,17 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
83
154
  folderId,
84
155
  newMessages: 0,
85
156
  reconciledFlags: 0,
157
+ hydratedBodies: 0,
158
+ bodyHydrationErrors: 0,
86
159
  uidValidityRolled: false,
87
160
  error: errorMessage(existing.error),
88
161
  };
89
162
  }
90
- let state = parseSyncState(existing.value?.metadata ?? null);
163
+ let parsedState = parseSyncState(existing.value?.metadata ?? null);
164
+ let state = parsedState?.state ?? null;
91
165
  let uidValidityRolled = false;
166
+ const latestUid = status.uidNext - 1;
167
+ const recentFirst = watcher.recent_first;
92
168
  // UIDVALIDITY rollover: drop the folder and start over.
93
169
  if (state !== null && state.uidValidity !== status.uidValidity) {
94
170
  uidValidityRolled = true;
@@ -98,23 +174,31 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
98
174
  folderId,
99
175
  newMessages: 0,
100
176
  reconciledFlags: 0,
177
+ hydratedBodies: 0,
178
+ bodyHydrationErrors: 0,
101
179
  uidValidityRolled,
102
180
  error: errorMessage(del.error),
103
181
  };
104
182
  }
183
+ parsedState = null;
105
184
  state = null;
106
185
  }
107
- const fromUid = (state?.lastSyncedUid ?? 0) + 1;
108
- const toUid = status.uidNext - 1;
109
- let lastSynced = state?.lastSyncedUid ?? 0;
110
186
  let newMessages = 0;
187
+ let forwardMessages = 0;
188
+ let backfilledMessages = 0;
111
189
  // Initial folder upsert with fresh metadata. We rewrite metadata at
112
190
  // each successful batch so the on-disk checkpoint mirrors progress.
113
191
  const writeState = async (next) => deps.drive.upsertFolder(mailboxId, folderId, folderId, next);
192
+ const recentFrom = Math.max(1, status.uidNext - recentFirst.initial_recent_window);
193
+ const needsRecentBootstrap = recentFirst.enabled &&
194
+ latestUid >= 1 &&
195
+ (state === null || (parsedState?.source === "legacy" && state.forwardSyncedUid < latestUid));
114
196
  if (state === null) {
115
197
  const init = {
116
198
  uidValidity: status.uidValidity,
117
199
  uidNext: status.uidNext,
200
+ forwardSyncedUid: 0,
201
+ backfillBeforeUid: needsRecentBootstrap && recentFrom > 1 ? recentFrom : null,
118
202
  lastSyncedUid: 0,
119
203
  lastSyncStartedAt: startIso,
120
204
  lastSyncFinishedAt: null,
@@ -126,6 +210,8 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
126
210
  folderId,
127
211
  newMessages: 0,
128
212
  reconciledFlags: 0,
213
+ hydratedBodies: 0,
214
+ bodyHydrationErrors: 0,
129
215
  uidValidityRolled,
130
216
  error: errorMessage(w.error),
131
217
  };
@@ -133,101 +219,99 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
133
219
  state = init;
134
220
  }
135
221
  else {
136
- const w = await writeState({
222
+ state = {
137
223
  ...state,
138
224
  uidNext: status.uidNext,
225
+ backfillBeforeUid: needsRecentBootstrap && recentFrom > 1 ? recentFrom : state.backfillBeforeUid,
139
226
  lastSyncStartedAt: startIso,
140
227
  lastSyncError: null,
141
- });
228
+ };
229
+ const w = await writeState(state);
142
230
  if (w.tag === "Err") {
143
231
  return {
144
232
  folderId,
145
233
  newMessages: 0,
146
234
  reconciledFlags: 0,
235
+ hydratedBodies: 0,
236
+ bodyHydrationErrors: 0,
147
237
  uidValidityRolled,
148
238
  error: errorMessage(w.error),
149
239
  };
150
240
  }
151
241
  }
152
- if (toUid >= fromUid) {
153
- const finishWithError = async (error) => {
154
- const w = await writeState({
155
- ...state,
156
- uidValidity: status.uidValidity,
157
- uidNext: status.uidNext,
158
- lastSyncedUid: lastSynced,
159
- lastSyncError: errorMessage(error),
160
- lastSyncFinishedAt: deps.now().toISOString(),
161
- });
162
- if (w.tag === "Err") {
163
- return {
164
- folderId,
165
- newMessages,
166
- reconciledFlags: 0,
167
- uidValidityRolled,
168
- error: errorMessage(w.error),
169
- };
170
- }
242
+ const finishWithError = async (error) => {
243
+ const erroredState = {
244
+ ...state,
245
+ uidValidity: status.uidValidity,
246
+ uidNext: status.uidNext,
247
+ lastSyncError: errorMessage(error),
248
+ lastSyncFinishedAt: deps.now().toISOString(),
249
+ };
250
+ const w = await writeState(erroredState);
251
+ if (w.tag === "Err") {
171
252
  return {
172
253
  folderId,
173
254
  newMessages,
255
+ forwardMessages,
256
+ backfilledMessages,
174
257
  reconciledFlags: 0,
258
+ hydratedBodies,
259
+ bodyHydrationErrors,
175
260
  uidValidityRolled,
176
- error: errorMessage(error),
261
+ forwardSyncedUid: state?.forwardSyncedUid ?? null,
262
+ backfillBeforeUid: state?.backfillBeforeUid ?? null,
263
+ backfillComplete: state?.backfillBeforeUid === null,
264
+ error: errorMessage(w.error),
177
265
  };
266
+ }
267
+ state = erroredState;
268
+ return {
269
+ folderId,
270
+ newMessages,
271
+ forwardMessages,
272
+ backfilledMessages,
273
+ reconciledFlags: 0,
274
+ hydratedBodies,
275
+ bodyHydrationErrors,
276
+ uidValidityRolled,
277
+ forwardSyncedUid: state.forwardSyncedUid,
278
+ backfillBeforeUid: state.backfillBeforeUid,
279
+ backfillComplete: state.backfillBeforeUid === null,
280
+ error: errorMessage(error),
178
281
  };
179
- for (const [batchFrom, batchTo] of range(fromUid, toUid)) {
282
+ };
283
+ const processMetadataRanges = async (rangesToProcess, mode, hydrateBodies) => {
284
+ for (const [batchFrom, batchTo] of rangesToProcess) {
180
285
  let sawMessageInBatch = false;
286
+ let durableUid = mode === "forward" ? batchFrom - 1 : batchTo + 1;
181
287
  try {
182
- for await (const bundle of deps.imap.fetchRange(account.name, folderPath, batchFrom, batchTo)) {
288
+ for await (const imapMessage of deps.imap.fetchMetadataRange(account.name, folderPath, batchFrom, batchTo)) {
183
289
  sawMessageInBatch = true;
184
- const uid = bundle.imapMessage.uid;
290
+ const uid = imapMessage.uid;
185
291
  const externalId = externalIdFor(status.uidValidity, uid);
186
- let payload = toStoredPayload(bundle.imapMessage, {
292
+ const payload = toStoredPayload(imapMessage, {
187
293
  accountId: account.name,
188
294
  mailbox: folderPath,
189
295
  uidValidity: status.uidValidity,
190
296
  fetchedAt: deps.now(),
191
- bodyText: bundle.bodyText,
192
- bodyHtml: bundle.bodyHtml,
297
+ bodyText: null,
298
+ bodyHtml: null,
193
299
  truncated: false,
194
300
  });
195
- const initialUpsert = await deps.drive.upsertMessages(mailboxId, folderId, [payload], [externalId]);
196
- if (initialUpsert.tag === "Err") {
197
- return await finishWithError(initialUpsert.error);
198
- }
199
- if (payload.attachments.length === 0) {
200
- newMessages += initialUpsert.value.inserted + initialUpsert.value.updated;
201
- lastSynced = uid;
202
- continue;
203
- }
204
- for (const rawAttachment of payload.attachments) {
205
- const attachment = withAttachmentId(rawAttachment, status.uidValidity, uid);
206
- const downloaded = await deps.imap.downloadPart(account.name, folderPath, uid, attachment.partId);
207
- const uploadAttachment = {
208
- ...attachment,
209
- sizeBytes: downloaded.sizeBytes ?? attachment.sizeBytes,
210
- contentType: downloaded.contentType ?? attachment.contentType,
211
- };
212
- const uploaded = await (async () => {
213
- try {
214
- return await deps.drive.uploadAttachment(mailboxId, folderId, externalId, uploadAttachment, downloaded.content);
215
- }
216
- finally {
217
- downloaded.dispose();
218
- }
219
- })();
220
- if (uploaded.tag === "Err") {
221
- return await finishWithError(uploaded.error);
222
- }
223
- payload = patchAttachmentStorageRef(payload, attachment.attachmentId, uploaded.value);
301
+ const upsert = await deps.drive.upsertMessages(mailboxId, folderId, [payload], [externalId]);
302
+ if (upsert.tag === "Err") {
303
+ return await finishWithError(upsert.error);
224
304
  }
225
- const finalUpsert = await deps.drive.upsertMessages(mailboxId, folderId, [payload], [externalId]);
226
- if (finalUpsert.tag === "Err") {
227
- return await finishWithError(finalUpsert.error);
305
+ const changed = upsert.value.inserted + upsert.value.updated;
306
+ newMessages += changed;
307
+ if (mode === "forward")
308
+ forwardMessages += changed;
309
+ else
310
+ backfilledMessages += changed;
311
+ if (hydrateBodies && bodyHydrationEnabledForFolder(watcher, folderPath, specialUse)) {
312
+ bodyHydrationCandidates.push({ mailboxId, folderId, externalId });
228
313
  }
229
- newMessages += initialUpsert.value.inserted + initialUpsert.value.updated;
230
- lastSynced = uid;
314
+ durableUid = uid;
231
315
  }
232
316
  }
233
317
  catch (cause) {
@@ -235,41 +319,96 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
235
319
  return await finishWithError(e);
236
320
  }
237
321
  if (!sawMessageInBatch) {
238
- // Range was empty -- advance the checkpoint to the batch top
239
- // anyway, we now know there is nothing to fetch in there.
240
- lastSynced = batchTo;
322
+ // Range was empty -- advance the checkpoint anyway; we now know
323
+ // there is nothing to fetch in that range.
324
+ durableUid = mode === "forward" ? batchTo : batchFrom;
241
325
  }
242
- // Checkpoint: write once after the batch, but the value is the
243
- // highest UID whose full message payload + attachment bytes are durable.
244
- const checkpoint = {
245
- ...state,
246
- uidValidity: status.uidValidity,
247
- uidNext: status.uidNext,
248
- lastSyncedUid: lastSynced,
249
- lastSyncFinishedAt: deps.now().toISOString(),
250
- lastSyncError: null,
251
- };
326
+ const checkpoint = mode === "forward"
327
+ ? {
328
+ ...state,
329
+ uidValidity: status.uidValidity,
330
+ uidNext: status.uidNext,
331
+ forwardSyncedUid: durableUid,
332
+ lastSyncedUid: durableUid,
333
+ lastSyncFinishedAt: deps.now().toISOString(),
334
+ lastSyncError: null,
335
+ }
336
+ : {
337
+ ...state,
338
+ uidValidity: status.uidValidity,
339
+ uidNext: status.uidNext,
340
+ backfillBeforeUid: batchFrom > 1 ? batchFrom : null,
341
+ lastSyncFinishedAt: deps.now().toISOString(),
342
+ lastSyncError: null,
343
+ };
252
344
  const w = await writeState(checkpoint);
253
345
  if (w.tag === "Err") {
254
346
  return {
255
347
  folderId,
256
348
  newMessages,
349
+ forwardMessages,
350
+ backfilledMessages,
257
351
  reconciledFlags: 0,
352
+ hydratedBodies,
353
+ bodyHydrationErrors,
258
354
  uidValidityRolled,
355
+ forwardSyncedUid: state?.forwardSyncedUid ?? null,
356
+ backfillBeforeUid: state?.backfillBeforeUid ?? null,
357
+ backfillComplete: state?.backfillBeforeUid === null,
259
358
  error: errorMessage(w.error),
260
359
  };
261
360
  }
262
361
  state = checkpoint;
263
362
  }
363
+ return null;
364
+ };
365
+ if (latestUid >= 1) {
366
+ if (needsRecentBootstrap) {
367
+ const bootstrapError = await processMetadataRanges(range(recentFrom, latestUid), "forward", true);
368
+ if (bootstrapError !== null)
369
+ return bootstrapError;
370
+ }
371
+ else if (latestUid > state.forwardSyncedUid) {
372
+ const forwardError = await processMetadataRanges(range(state.forwardSyncedUid + 1, latestUid), "forward", true);
373
+ if (forwardError !== null)
374
+ return forwardError;
375
+ }
376
+ if (!needsRecentBootstrap &&
377
+ recentFirst.enabled &&
378
+ recentFirst.backfill_window_per_tick > 0 &&
379
+ state.backfillBeforeUid !== null &&
380
+ state.backfillBeforeUid > 1) {
381
+ const backfillTo = state.backfillBeforeUid - 1;
382
+ const backfillFrom = Math.max(1, state.backfillBeforeUid - recentFirst.backfill_window_per_tick);
383
+ const backfillError = await processMetadataRanges(descendingRange(backfillFrom, backfillTo), "backfill", false);
384
+ if (backfillError !== null)
385
+ return backfillError;
386
+ }
387
+ }
388
+ if (bodyHydrationCandidates.length > 0) {
389
+ const hydration = await hydrateStoredMessageBodies({
390
+ drive: deps.drive,
391
+ imap: { fetchBody: deps.imap.fetchBody },
392
+ now: deps.now,
393
+ }, bodyHydrationCandidates.slice().reverse(), { maxMessages: watcher.body_hydration.max_messages_per_tick });
394
+ if (hydration.tag === "Ok") {
395
+ hydratedBodies = hydration.value.loaded.length;
396
+ bodyHydrationErrors =
397
+ hydration.value.failedRetryable.length + hydration.value.failedPermanent.length;
398
+ }
399
+ else {
400
+ bodyHydrationErrors = bodyHydrationCandidates.length;
401
+ }
264
402
  }
265
403
  // Sliding-window flag reconciliation. Bounds drift to flagWindow UIDs.
266
404
  let reconciledFlags = 0;
267
- if (flagWindow > 0 && lastSynced > 0) {
268
- const reconFrom = Math.max(1, lastSynced - flagWindow + 1);
405
+ if (flagWindow > 0 && state.forwardSyncedUid > 0) {
406
+ const reconTo = state.forwardSyncedUid;
407
+ const reconFrom = Math.max(1, reconTo - flagWindow + 1);
269
408
  try {
270
409
  const updated = [];
271
410
  const updatedIds = [];
272
- for await (const env of deps.imap.fetchEnvelopesRange(account.name, folderPath, reconFrom, lastSynced)) {
411
+ for await (const env of deps.imap.fetchEnvelopesRange(account.name, folderPath, reconFrom, reconTo)) {
273
412
  const incoming = toStoredPayload(env, {
274
413
  accountId: account.name,
275
414
  mailbox: folderPath,
@@ -286,6 +425,8 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
286
425
  folderId,
287
426
  newMessages,
288
427
  reconciledFlags: 0,
428
+ hydratedBodies,
429
+ bodyHydrationErrors,
289
430
  uidValidityRolled,
290
431
  error: errorMessage(existingPayload.error),
291
432
  };
@@ -301,6 +442,8 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
301
442
  folderId,
302
443
  newMessages,
303
444
  reconciledFlags: 0,
445
+ hydratedBodies,
446
+ bodyHydrationErrors,
304
447
  uidValidityRolled,
305
448
  error: errorMessage(ups.error),
306
449
  };
@@ -315,12 +458,27 @@ const syncFolder = async (deps, account, mailboxId, folderPath, flagWindow) => {
315
458
  folderId,
316
459
  newMessages,
317
460
  reconciledFlags: 0,
461
+ hydratedBodies,
462
+ bodyHydrationErrors,
318
463
  uidValidityRolled,
319
464
  error: errorMessage(e),
320
465
  };
321
466
  }
322
467
  }
323
- return { folderId, newMessages, reconciledFlags, uidValidityRolled, error: null };
468
+ return {
469
+ folderId,
470
+ newMessages,
471
+ forwardMessages,
472
+ backfilledMessages,
473
+ reconciledFlags,
474
+ hydratedBodies,
475
+ bodyHydrationErrors,
476
+ uidValidityRolled,
477
+ forwardSyncedUid: state.forwardSyncedUid,
478
+ backfillBeforeUid: state.backfillBeforeUid,
479
+ backfillComplete: state.backfillBeforeUid === null,
480
+ error: null,
481
+ };
324
482
  };
325
483
  /**
326
484
  * Run one sync tick for one account. Sequentially walks all folders,
@@ -355,15 +513,15 @@ export const runSyncOnce = async (deps, account, watcher) => {
355
513
  };
356
514
  }
357
515
  const allFolders = foldersR.value;
358
- const filteredFolders = (() => {
516
+ const filteredFolders = sortFoldersByPriority((() => {
359
517
  if (watcher.folders === undefined || watcher.folders.length === 0)
360
518
  return allFolders;
361
519
  const allow = new Set(watcher.folders);
362
520
  return allFolders.filter((f) => allow.has(f.path));
363
- })();
521
+ })());
364
522
  const reports = [];
365
523
  for (const f of filteredFolders) {
366
- const r = await syncFolder(deps, account, mailboxId, f.path, watcher.flag_reconcile_window);
524
+ const r = await syncFolder(deps, account, mailboxId, f.path, f.specialUse, watcher);
367
525
  reports.push(r);
368
526
  }
369
527
  // Prune Drive folders that disappeared from IMAP.
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
@@ -17,8 +17,15 @@ import { type SyncDeps, type SyncReport } from "./sync.js";
17
17
  export type WatcherFolderStatus = {
18
18
  readonly folderId: string;
19
19
  readonly newMessages: number;
20
+ readonly forwardMessages: number;
21
+ readonly backfilledMessages: number;
20
22
  readonly reconciledFlags: number;
23
+ readonly hydratedBodies: number;
24
+ readonly bodyHydrationErrors: number;
21
25
  readonly uidValidityRolled: boolean;
26
+ readonly forwardSyncedUid: number | null;
27
+ readonly backfillBeforeUid: number | null;
28
+ readonly backfillComplete: boolean;
22
29
  readonly error: string | null;
23
30
  };
24
31
  export type WatcherAccountStatus = {
@@ -23,8 +23,15 @@ const reportToStatus = (rep) => ({
23
23
  folders: rep.folders.map((f) => ({
24
24
  folderId: f.folderId,
25
25
  newMessages: f.newMessages,
26
+ forwardMessages: f.forwardMessages ?? f.newMessages,
27
+ backfilledMessages: f.backfilledMessages ?? 0,
26
28
  reconciledFlags: f.reconciledFlags,
29
+ hydratedBodies: f.hydratedBodies,
30
+ bodyHydrationErrors: f.bodyHydrationErrors,
27
31
  uidValidityRolled: f.uidValidityRolled,
32
+ forwardSyncedUid: f.forwardSyncedUid ?? null,
33
+ backfillBeforeUid: f.backfillBeforeUid ?? null,
34
+ backfillComplete: f.backfillComplete ?? true,
28
35
  error: f.error,
29
36
  })),
30
37
  });
@@ -71,6 +78,8 @@ export const buildWatcher = (deps, accounts, watcher, log) => {
71
78
  accountId: acct.name,
72
79
  folders: rep.folders.length,
73
80
  newMessages: rep.folders.reduce((s, f) => s + f.newMessages, 0),
81
+ hydratedBodies: rep.folders.reduce((s, f) => s + f.hydratedBodies, 0),
82
+ bodyHydrationErrors: rep.folders.reduce((s, f) => s + f.bodyHydrationErrors, 0),
74
83
  });
75
84
  return rep;
76
85
  }