@bobfrankston/rmfmail 1.0.546 → 1.0.548
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.
- package/bin/mailx.js +13 -0
- package/bin/mailx.js.map +1 -1
- package/bin/mailx.ts +13 -0
- package/client/app.js +51 -1
- package/client/app.js.map +1 -1
- package/client/app.ts +50 -1
- package/client/components/message-list.js +1 -3
- package/client/components/message-list.js.map +1 -1
- package/client/components/message-list.ts +1 -3
- package/client/components/message-viewer.js +65 -97
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +51 -90
- package/client/lib/api-client.js +5 -0
- package/client/lib/api-client.js.map +1 -1
- package/client/lib/api-client.ts +5 -1
- package/client/styles/components.css +0 -12
- package/package.json +1 -1
- package/packages/mailx-server/index.d.ts.map +1 -1
- package/packages/mailx-server/index.js +13 -0
- package/packages/mailx-server/index.js.map +1 -1
- package/packages/mailx-server/index.ts +14 -0
- package/packages/mailx-service/index.d.ts +26 -0
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +82 -235
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +45 -54
- package/packages/mailx-service/local-store.d.ts +5 -0
- package/packages/mailx-service/local-store.d.ts.map +1 -1
- package/packages/mailx-service/local-store.js +112 -12
- package/packages/mailx-service/local-store.js.map +1 -1
- package/packages/mailx-service/reconciler.d.ts +62 -0
- package/packages/mailx-service/reconciler.d.ts.map +1 -0
- package/packages/mailx-service/reconciler.js +141 -0
- package/packages/mailx-service/reconciler.js.map +1 -0
- package/packages/mailx-service/reconciler.ts +151 -0
- package/packages/mailx-service/sync-queue.d.ts +79 -0
- package/packages/mailx-service/sync-queue.d.ts.map +1 -0
- package/packages/mailx-service/sync-queue.js +118 -0
- package/packages/mailx-service/sync-queue.js.map +1 -0
- package/packages/mailx-service/sync-queue.ts +134 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -294,6 +294,20 @@ imapManager.on("accountError", (accountId: string, error: string, hint: string,
|
|
|
294
294
|
broadcast({ type: "accountError", accountId, error, hint, isOAuth });
|
|
295
295
|
});
|
|
296
296
|
|
|
297
|
+
// Local-first: body fetch lifecycle for the HTTP/WebSocket dev mode.
|
|
298
|
+
// Mirrors the bin/mailx.ts IPC forwarders so a click on an uncached row
|
|
299
|
+
// gets `cached:false` envelope back instantly and the body lands via a
|
|
300
|
+
// WebSocket event instead of a per-click await.
|
|
301
|
+
imapManager.on("bodyAvailable", (payload: any) => {
|
|
302
|
+
broadcast({ type: "bodyAvailable", ...payload });
|
|
303
|
+
});
|
|
304
|
+
imapManager.on("bodyFetchError", (payload: any) => {
|
|
305
|
+
broadcast({ type: "bodyFetchError", ...payload });
|
|
306
|
+
});
|
|
307
|
+
imapManager.on("messageRemoved", (payload: any) => {
|
|
308
|
+
broadcast({ type: "messageRemoved", ...payload });
|
|
309
|
+
});
|
|
310
|
+
|
|
297
311
|
// ── Startup ──
|
|
298
312
|
|
|
299
313
|
async function start(): Promise<void> {
|
|
@@ -38,6 +38,16 @@ export declare class MailxService {
|
|
|
38
38
|
* bin/mailx.ts with mailx-host's showMessageBox. Without this,
|
|
39
39
|
* showReminderPopup returns a "no host" reason. */
|
|
40
40
|
setPopupFn(fn: PopupFn): void;
|
|
41
|
+
/** Local-first read/write facade. Every UI IPC handler that touches the
|
|
42
|
+
* local DB or body store goes through this — no awaiting IMAP, no
|
|
43
|
+
* awaiting Gmail API, no awaiting SMTP. See docs/local-first-plan.md. */
|
|
44
|
+
private localStore;
|
|
45
|
+
/** Persistent (and in-memory body-fetch) queue. UI handlers commit
|
|
46
|
+
* locally, then enqueue a server-mirror task here. */
|
|
47
|
+
private syncQueue;
|
|
48
|
+
/** Background loop: drains body-fetch tasks, retries failed message
|
|
49
|
+
* actions, emits sync-state events for the status pill. */
|
|
50
|
+
private reconciler;
|
|
41
51
|
constructor(db: MailxDB, imapManager: ImapManager);
|
|
42
52
|
private _contactsFlushTimer;
|
|
43
53
|
private _contactsFlushInFlight;
|
|
@@ -93,7 +103,23 @@ export declare class MailxService {
|
|
|
93
103
|
getFolders(accountId: string): Folder[];
|
|
94
104
|
getUnifiedInbox(page?: number, pageSize?: number): any;
|
|
95
105
|
getMessages(accountId: string, folderId: number, page?: number, pageSize?: number, sort?: string, sortDir?: string, search?: string, flaggedOnly?: boolean): any;
|
|
106
|
+
/** UI body read — local-first. Returns immediately from the local cache:
|
|
107
|
+
* `cached: true` with the full parsed body when on disk, or `cached: false`
|
|
108
|
+
* with envelope-only when not. In the cache-miss case we kick off a
|
|
109
|
+
* fire-and-forget IMAP fetch in the background and emit `bodyAvailable`
|
|
110
|
+
* when the body lands; the UI listens for that event and re-requests.
|
|
111
|
+
*
|
|
112
|
+
* No `await imap*` in the click → render path. The 60s body-fetch race
|
|
113
|
+
* and structured `bodyError` shape that lived here previously are gone —
|
|
114
|
+
* step 1 of the local-first refactor (docs/local-first-plan.md). */
|
|
96
115
|
getMessage(accountId: string, uid: number, allowRemote?: boolean, folderId?: number): Promise<any>;
|
|
116
|
+
/** Diagnostic accessor — exposed for the sync-status pill / debug UI.
|
|
117
|
+
* Returns the current queue counts so the UI can render
|
|
118
|
+
* "Sync OK / Syncing N items" without polling per-account state. */
|
|
119
|
+
getSyncStatus(): {
|
|
120
|
+
messageActions: number;
|
|
121
|
+
bodyFetches: number;
|
|
122
|
+
};
|
|
97
123
|
/** RFC 8058 one-click unsubscribe: POST `List-Unsubscribe=One-Click` to the
|
|
98
124
|
* HTTPS URL the message's List-Unsubscribe header advertised. Done server-
|
|
99
125
|
* side because the unsubscribe endpoint usually doesn't set CORS headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,11 @@ import * as fs from "node:fs";
|
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
const __dirname = import.meta.dirname;
|
|
10
10
|
import * as gsync from "./google-sync.js";
|
|
11
|
-
import {
|
|
11
|
+
import { LocalStore } from "./local-store.js";
|
|
12
|
+
import { SyncQueue } from "./sync-queue.js";
|
|
13
|
+
import { Reconciler } from "./reconciler.js";
|
|
12
14
|
import { loadSettings, saveSettings, loadAccounts, loadAccountsAsync, saveAccounts, initCloudConfig, loadAllowlist, saveAllowlist, loadAutocomplete, saveAutocomplete, loadKeys, getStorageInfo, getConfigDir } from "@bobfrankston/mailx-settings";
|
|
13
|
-
import {
|
|
15
|
+
import { encodeQuotedPrintable, htmlToPlainText } from "@bobfrankston/mailx-types";
|
|
14
16
|
import { simpleParser } from "mailparser";
|
|
15
17
|
/** Detect mis-labeled charset and rewrite the part header to `utf-8` when
|
|
16
18
|
* the body bytes are actually valid UTF-8. PHPMailer-driven senders are
|
|
@@ -24,41 +26,8 @@ import { simpleParser } from "mailparser";
|
|
|
24
26
|
* bytes out of place, which would be common in genuine Latin-1 text. */
|
|
25
27
|
// sniffAndFixCharset moved to ./charset.ts so LocalStore can use it
|
|
26
28
|
// without creating a circular dep with index.ts.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
* also scan the raw header text for the full set of angle-bracketed URIs. */
|
|
30
|
-
function parseListUnsubscribe(headers) {
|
|
31
|
-
let mail = "";
|
|
32
|
-
let http = "";
|
|
33
|
-
let oneClick = false;
|
|
34
|
-
const raw = headers.get("list-unsubscribe");
|
|
35
|
-
const rawStr = typeof raw === "string" ? raw : (raw && typeof raw.text === "string" ? raw.text : "");
|
|
36
|
-
if (rawStr) {
|
|
37
|
-
const matches = rawStr.match(/<([^>]+)>/g) || [];
|
|
38
|
-
for (const m of matches) {
|
|
39
|
-
const url = m.slice(1, -1).trim();
|
|
40
|
-
if (!mail && /^mailto:/i.test(url))
|
|
41
|
-
mail = url;
|
|
42
|
-
else if (!http && /^https?:/i.test(url))
|
|
43
|
-
http = url;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
if (!mail && !http) {
|
|
47
|
-
const listHeaders = headers.get("list");
|
|
48
|
-
if (listHeaders?.unsubscribe) {
|
|
49
|
-
const unsub = listHeaders.unsubscribe;
|
|
50
|
-
if (unsub.url)
|
|
51
|
-
http = Array.isArray(unsub.url) ? unsub.url[0] : unsub.url;
|
|
52
|
-
if (unsub.mail)
|
|
53
|
-
mail = `mailto:${Array.isArray(unsub.mail) ? unsub.mail[0] : unsub.mail}`;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const post = headers.get("list-unsubscribe-post");
|
|
57
|
-
const postStr = typeof post === "string" ? post : (post && typeof post.text === "string" ? post.text : "");
|
|
58
|
-
if (postStr && /one-?click/i.test(postStr))
|
|
59
|
-
oneClick = true;
|
|
60
|
-
return { listUnsubscribeMail: mail, listUnsubscribeHttp: http, listUnsubscribeOneClick: oneClick };
|
|
61
|
-
}
|
|
29
|
+
// parseListUnsubscribe moved to ./local-store.ts (only consumer is the
|
|
30
|
+
// body-read path, which is now part of LocalStore).
|
|
62
31
|
// ── Email provider detection (MX-based) ──
|
|
63
32
|
const GOOGLE_DOMAINS = ["gmail.com", "googlemail.com"];
|
|
64
33
|
const MS_DOMAINS = ["outlook.com", "hotmail.com", "live.com"];
|
|
@@ -121,9 +90,23 @@ export class MailxService {
|
|
|
121
90
|
* bin/mailx.ts with mailx-host's showMessageBox. Without this,
|
|
122
91
|
* showReminderPopup returns a "no host" reason. */
|
|
123
92
|
setPopupFn(fn) { this.popupFn = fn; }
|
|
93
|
+
/** Local-first read/write facade. Every UI IPC handler that touches the
|
|
94
|
+
* local DB or body store goes through this — no awaiting IMAP, no
|
|
95
|
+
* awaiting Gmail API, no awaiting SMTP. See docs/local-first-plan.md. */
|
|
96
|
+
localStore;
|
|
97
|
+
/** Persistent (and in-memory body-fetch) queue. UI handlers commit
|
|
98
|
+
* locally, then enqueue a server-mirror task here. */
|
|
99
|
+
syncQueue;
|
|
100
|
+
/** Background loop: drains body-fetch tasks, retries failed message
|
|
101
|
+
* actions, emits sync-state events for the status pill. */
|
|
102
|
+
reconciler;
|
|
124
103
|
constructor(db, imapManager) {
|
|
125
104
|
this.db = db;
|
|
126
105
|
this.imapManager = imapManager;
|
|
106
|
+
this.localStore = new LocalStore(db, imapManager.getBodyStore());
|
|
107
|
+
this.syncQueue = new SyncQueue(db, imapManager);
|
|
108
|
+
this.reconciler = new Reconciler(db, imapManager, this.syncQueue);
|
|
109
|
+
this.reconciler.start();
|
|
127
110
|
// Invalidate account cache when accounts.jsonc changes on disk or GDrive.
|
|
128
111
|
this.imapManager.on?.("configChanged", (filename) => {
|
|
129
112
|
if (filename === "accounts.jsonc")
|
|
@@ -387,198 +370,49 @@ export class MailxService {
|
|
|
387
370
|
}
|
|
388
371
|
// ── Messages ──
|
|
389
372
|
getUnifiedInbox(page = 1, pageSize = 50) {
|
|
390
|
-
return this.
|
|
373
|
+
return this.localStore.getUnifiedInbox(page, pageSize);
|
|
391
374
|
}
|
|
392
375
|
getMessages(accountId, folderId, page = 1, pageSize = 50, sort = "date", sortDir = "desc", search, flaggedOnly = false) {
|
|
393
|
-
return this.
|
|
376
|
+
return this.localStore.getMessages({ accountId, folderId, page, pageSize, sort: sort, sortDir: sortDir, search, flaggedOnly });
|
|
394
377
|
}
|
|
378
|
+
/** UI body read — local-first. Returns immediately from the local cache:
|
|
379
|
+
* `cached: true` with the full parsed body when on disk, or `cached: false`
|
|
380
|
+
* with envelope-only when not. In the cache-miss case we kick off a
|
|
381
|
+
* fire-and-forget IMAP fetch in the background and emit `bodyAvailable`
|
|
382
|
+
* when the body lands; the UI listens for that event and re-requests.
|
|
383
|
+
*
|
|
384
|
+
* No `await imap*` in the click → render path. The 60s body-fetch race
|
|
385
|
+
* and structured `bodyError` shape that lived here previously are gone —
|
|
386
|
+
* step 1 of the local-first refactor (docs/local-first-plan.md). */
|
|
395
387
|
async getMessage(accountId, uid, allowRemote = false, folderId) {
|
|
396
|
-
const
|
|
397
|
-
if (!
|
|
388
|
+
const local = await this.localStore.getMessage(accountId, uid, allowRemote, folderId);
|
|
389
|
+
if (!local)
|
|
398
390
|
throw new Error("Message not found");
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
this.imapManager.fetchMessageBody(accountId, envelope.folderId, envelope.uid),
|
|
412
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error("body fetch timed out — try again")), BODY_FETCH_TIMEOUT_MS)),
|
|
413
|
-
]);
|
|
414
|
-
}
|
|
415
|
-
catch (fetchErr) {
|
|
416
|
-
// Message was deleted from the server (another device, expunge, etc.) —
|
|
417
|
-
// drop the stale local row so the UI removes it instead of showing a
|
|
418
|
-
// confusing error. Throwing a tagged error lets the client react.
|
|
419
|
-
if (fetchErr?.isNotFound) {
|
|
420
|
-
try {
|
|
421
|
-
this.db.deleteMessage(accountId, envelope.uid);
|
|
422
|
-
this.db.recalcFolderCounts(envelope.folderId);
|
|
423
|
-
}
|
|
424
|
-
catch { /* ignore */ }
|
|
425
|
-
const err = new Error("Message was deleted from the server");
|
|
426
|
-
err.isNotFound = true;
|
|
427
|
-
throw err;
|
|
428
|
-
}
|
|
429
|
-
// Don't stuff the error text into bodyText — it bleeds into the
|
|
430
|
-
// viewer's main content area. Surface as a structured error field
|
|
431
|
-
// so the UI can render a banner with retry UX above the (empty)
|
|
432
|
-
// body. The caller keeps the envelope so the header still shows.
|
|
433
|
-
const rawErr = fetchErr.message || "connection failed";
|
|
434
|
-
const isTransient = /connection|Too many|UNAVAILABLE|rate|429|5\d\d|timeout|ENOTFOUND|ECONNRESET|ETIMEDOUT/i.test(rawErr);
|
|
435
|
-
return {
|
|
436
|
-
...envelope, bodyHtml: "", bodyText: "",
|
|
437
|
-
bodyError: rawErr,
|
|
438
|
-
bodyErrorTransient: isTransient,
|
|
439
|
-
hasRemoteContent: false, remoteAllowed: false, attachments: [], emlPath: "", deliveredTo: "", returnPath: "", listUnsubscribe: ""
|
|
440
|
-
};
|
|
441
|
-
}
|
|
442
|
-
if (!raw) {
|
|
443
|
-
// Same treatment as the thrown-error case: structured field, not body text.
|
|
444
|
-
return {
|
|
445
|
-
...envelope, bodyHtml: "", bodyText: "",
|
|
446
|
-
bodyError: "Message body not cached locally and the server fetch returned nothing.",
|
|
447
|
-
bodyErrorTransient: true,
|
|
448
|
-
hasRemoteContent: false, remoteAllowed: false, attachments: [], emlPath: "", deliveredTo: "", returnPath: "", listUnsubscribe: ""
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
// Many senders (esp. PHPMailer-driven marketing) declare
|
|
453
|
-
// `charset=iso-8859-1` but emit UTF-8 bytes. simpleParser
|
|
454
|
-
// honors the declared charset and produces "â??" garbage for
|
|
455
|
-
// every non-ASCII codepoint (em-dash, smart quotes, …). If
|
|
456
|
-
// the raw body bytes are valid UTF-8, rewrite the charset
|
|
457
|
-
// header before parsing. We only override the obviously-
|
|
458
|
-
// wrong legacy declarations; explicit utf-8 / koi8 / etc.
|
|
459
|
-
// pass through.
|
|
460
|
-
const adjusted = sniffAndFixCharset(raw);
|
|
461
|
-
const parsed = await simpleParser(adjusted);
|
|
462
|
-
bodyHtml = parsed.html || "";
|
|
463
|
-
bodyText = parsed.text || "";
|
|
464
|
-
attachments = (parsed.attachments || []).map((a, i) => ({
|
|
465
|
-
id: i,
|
|
466
|
-
filename: a.filename || `attachment-${i}`,
|
|
467
|
-
mimeType: a.contentType || "application/octet-stream",
|
|
468
|
-
size: a.size || 0,
|
|
469
|
-
contentId: a.contentId || ""
|
|
470
|
-
}));
|
|
471
|
-
}
|
|
472
|
-
// Sanitize HTML
|
|
473
|
-
if (bodyHtml && !allowRemote) {
|
|
474
|
-
const allowList = loadAllowlist();
|
|
475
|
-
const senderAddr = envelope.from?.address || "";
|
|
476
|
-
const senderDomain = senderAddr.split("@")[1] || "";
|
|
477
|
-
const toAddrs = (envelope.to || []).map((a) => a.address);
|
|
478
|
-
const isAllowed = allowList.senders.includes(senderAddr) ||
|
|
479
|
-
allowList.domains.includes(senderDomain) ||
|
|
480
|
-
toAddrs.some((a) => allowList.recipients?.includes(a));
|
|
481
|
-
if (isAllowed) {
|
|
482
|
-
allowRemote = true;
|
|
483
|
-
}
|
|
484
|
-
else {
|
|
485
|
-
const result = sanitizeHtml(bodyHtml);
|
|
486
|
-
bodyHtml = result.html;
|
|
487
|
-
hasRemoteContent = result.hasRemoteContent;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
// Extract headers
|
|
491
|
-
let deliveredTo = "";
|
|
492
|
-
let returnPath = "";
|
|
493
|
-
let listUnsubscribe = "";
|
|
494
|
-
let listUnsubscribeMail = "";
|
|
495
|
-
let listUnsubscribeHttp = "";
|
|
496
|
-
let listUnsubscribeOneClick = false;
|
|
497
|
-
if (raw) {
|
|
498
|
-
const parsed2 = await simpleParser(raw);
|
|
499
|
-
const hdr = (key) => {
|
|
500
|
-
let v = parsed2.headers.get(key);
|
|
501
|
-
if (!v)
|
|
502
|
-
return "";
|
|
503
|
-
if (Array.isArray(v))
|
|
504
|
-
v = v[0];
|
|
505
|
-
if (typeof v === "string")
|
|
506
|
-
return v;
|
|
507
|
-
if (typeof v === "object" && v !== null) {
|
|
508
|
-
if ("text" in v)
|
|
509
|
-
return v.text || "";
|
|
510
|
-
if ("value" in v)
|
|
511
|
-
return String(v.value);
|
|
512
|
-
if ("address" in v)
|
|
513
|
-
return v.address || "";
|
|
514
|
-
}
|
|
515
|
-
return String(v);
|
|
516
|
-
};
|
|
517
|
-
const msgSettings = loadSettings();
|
|
518
|
-
const acctConfig = msgSettings.accounts.find((a) => a.id === accountId);
|
|
519
|
-
const relayDomains = acctConfig?.relayDomains || [];
|
|
520
|
-
const prefixes = acctConfig?.deliveredToPrefix || [];
|
|
521
|
-
const rawDelivered = parsed2.headers.get("delivered-to");
|
|
522
|
-
if (rawDelivered) {
|
|
523
|
-
const deliveredList = Array.isArray(rawDelivered) ? rawDelivered : [rawDelivered];
|
|
524
|
-
for (let i = deliveredList.length - 1; i >= 0; i--) {
|
|
525
|
-
const d = deliveredList[i];
|
|
526
|
-
const addr = typeof d === "string" ? d : d?.text || d?.address || String(d);
|
|
527
|
-
if (!relayDomains.some(rd => addr.includes(`@${rd}`))) {
|
|
528
|
-
deliveredTo = addr;
|
|
529
|
-
break;
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
if (!deliveredTo && deliveredList.length > 0) {
|
|
533
|
-
const d = deliveredList[deliveredList.length - 1];
|
|
534
|
-
deliveredTo = typeof d === "string" ? d : d?.text || d?.address || String(d);
|
|
535
|
-
}
|
|
536
|
-
if (deliveredTo && prefixes.length > 0) {
|
|
537
|
-
const [local, domain] = deliveredTo.split("@");
|
|
538
|
-
for (const prefix of prefixes) {
|
|
539
|
-
if (local.startsWith(prefix)) {
|
|
540
|
-
deliveredTo = `${local.slice(prefix.length)}@${domain}`;
|
|
541
|
-
break;
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
returnPath = hdr("return-path").replace(/[<>]/g, "");
|
|
547
|
-
({ listUnsubscribeMail, listUnsubscribeHttp, listUnsubscribeOneClick } =
|
|
548
|
-
parseListUnsubscribe(parsed2.headers));
|
|
549
|
-
listUnsubscribe = listUnsubscribeHttp || listUnsubscribeMail;
|
|
550
|
-
}
|
|
551
|
-
// EML path: re-read the row after the fetch — `fetchMessageBody`
|
|
552
|
-
// writes the body to disk and updates `body_path` on success, but the
|
|
553
|
-
// `envelope` snapshot above pre-dates that write, so trusting it
|
|
554
|
-
// hides the Source button on every just-opened message.
|
|
555
|
-
const refreshed = this.db.getMessageByUid(accountId, uid, folderId);
|
|
556
|
-
const emlPath = refreshed?.bodyPath || envelope.bodyPath || "";
|
|
557
|
-
// Flag check — surfaced in the remote-content banner as a red
|
|
558
|
-
// warning when the sender's address or domain is on the user's
|
|
559
|
-
// flagged list. Cheap lookup; loadAllowlist is already cached.
|
|
560
|
-
const allowList = loadAllowlist();
|
|
561
|
-
const senderAddr = (envelope.from?.address || "").toLowerCase();
|
|
562
|
-
const senderDomain = senderAddr.split("@")[1] || "";
|
|
563
|
-
const isFlagged = !!((allowList.flaggedSenders || []).some((s) => (s || "").toLowerCase() === senderAddr) ||
|
|
564
|
-
(allowList.flaggedDomains || []).some((d) => (d || "").toLowerCase() === senderDomain));
|
|
565
|
-
// External reputation check — Spamhaus DBL + SURBL + URIBL in parallel.
|
|
566
|
-
// Off by default (privacy: the domain leaks to those DNSBLs and the
|
|
567
|
-
// user's local resolver). User opts in via Settings → "Check sender
|
|
568
|
-
// reputation". Each lookup is bounded at 500 ms; the whole check is
|
|
569
|
-
// bounded by the slowest, ~500 ms worst case.
|
|
391
|
+
if (!local.cached) {
|
|
392
|
+
// Body not on disk. Enqueue an interactive-lane fetch — the
|
|
393
|
+
// reconciler picks it up, emits `bodyAvailable` on success or
|
|
394
|
+
// `bodyFetchError` on failure. Return envelope-only; UI shows
|
|
395
|
+
// a placeholder and re-renders on the event.
|
|
396
|
+
this.syncQueue.enqueueBodyFetch(accountId, local.folderId, local.uid, "interactive");
|
|
397
|
+
this.reconciler.kick();
|
|
398
|
+
return local;
|
|
399
|
+
}
|
|
400
|
+
// Optional sender-reputation check. This is the one residual server
|
|
401
|
+
// touch in the read path (DNSBL lookup, ~500 ms). Opt-in via Settings;
|
|
402
|
+
// moves to the reconciler in step 4. See feedback_no_bandaids.md.
|
|
570
403
|
let reputation = null;
|
|
571
404
|
const settings = loadSettings() || {};
|
|
572
|
-
|
|
405
|
+
const senderDomain = (local.from?.address || "").toLowerCase().split("@")[1] || "";
|
|
406
|
+
if (settings.checkDomainReputation && senderDomain && local.hasRemoteContent) {
|
|
573
407
|
reputation = await this.checkDomainReputation(senderDomain);
|
|
574
408
|
}
|
|
575
|
-
return {
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
409
|
+
return { ...local, reputation };
|
|
410
|
+
}
|
|
411
|
+
/** Diagnostic accessor — exposed for the sync-status pill / debug UI.
|
|
412
|
+
* Returns the current queue counts so the UI can render
|
|
413
|
+
* "Sync OK / Syncing N items" without polling per-account state. */
|
|
414
|
+
getSyncStatus() {
|
|
415
|
+
return this.syncQueue.pendingCount();
|
|
582
416
|
}
|
|
583
417
|
/** RFC 8058 one-click unsubscribe: POST `List-Unsubscribe=One-Click` to the
|
|
584
418
|
* HTTPS URL the message's List-Unsubscribe header advertised. Done server-
|
|
@@ -1091,10 +925,10 @@ export class MailxService {
|
|
|
1091
925
|
return { items: sliced, total, page, pageSize };
|
|
1092
926
|
}
|
|
1093
927
|
else if (scope === "current" && accountId && folderId) {
|
|
1094
|
-
return this.
|
|
928
|
+
return this.localStore.searchMessages(q, page, pageSize, accountId, folderId);
|
|
1095
929
|
}
|
|
1096
930
|
else {
|
|
1097
|
-
return this.
|
|
931
|
+
return this.localStore.searchMessages(q, page, pageSize);
|
|
1098
932
|
}
|
|
1099
933
|
}
|
|
1100
934
|
rebuildSearchIndex() {
|
|
@@ -1250,7 +1084,7 @@ export class MailxService {
|
|
|
1250
1084
|
.catch(e => this.handleGoogleRefreshError("calendar", e));
|
|
1251
1085
|
}
|
|
1252
1086
|
}
|
|
1253
|
-
return this.
|
|
1087
|
+
return this.localStore.getCalendarEvents(acctId, fromMs, toMs);
|
|
1254
1088
|
}
|
|
1255
1089
|
/** Returns true if the feature is currently in a quota-exceeded cooldown. */
|
|
1256
1090
|
inQuotaCooldown(feature) {
|
|
@@ -1405,7 +1239,7 @@ export class MailxService {
|
|
|
1405
1239
|
.catch(e => this.handleGoogleRefreshError("tasks", e));
|
|
1406
1240
|
}
|
|
1407
1241
|
}
|
|
1408
|
-
return this.
|
|
1242
|
+
return this.localStore.getTasks(acctId, includeCompleted);
|
|
1409
1243
|
}
|
|
1410
1244
|
async refreshTasks(accountId, includeCompleted) {
|
|
1411
1245
|
const tp = await this.primaryTokenProvider("tasks");
|
|
@@ -2102,7 +1936,24 @@ export class MailxService {
|
|
|
2102
1936
|
const envelope = this.db.getMessageByUid(accountId, uid, folderId);
|
|
2103
1937
|
if (!envelope)
|
|
2104
1938
|
throw new Error("Message not found");
|
|
2105
|
-
|
|
1939
|
+
// Prefer the on-disk body — when the user just opened the message,
|
|
1940
|
+
// LocalStore.getMessage either returned cached:true (body already on
|
|
1941
|
+
// disk) or kicked a background fetch that wrote it. Either way a
|
|
1942
|
+
// re-fetch here would be wasted IMAP work and risks racing.
|
|
1943
|
+
const bodyStore = this.imapManager.getBodyStore();
|
|
1944
|
+
let raw = null;
|
|
1945
|
+
const storedPath = envelope.bodyPath || this.db.getMessageBodyPath(accountId, uid) || "";
|
|
1946
|
+
if (storedPath && await bodyStore.hasByPath(storedPath)) {
|
|
1947
|
+
try {
|
|
1948
|
+
raw = await bodyStore.readByPath(storedPath);
|
|
1949
|
+
}
|
|
1950
|
+
catch {
|
|
1951
|
+
raw = null;
|
|
1952
|
+
}
|
|
1953
|
+
}
|
|
1954
|
+
if (!raw) {
|
|
1955
|
+
raw = await this.imapManager.fetchMessageBody(accountId, envelope.folderId, envelope.uid);
|
|
1956
|
+
}
|
|
2106
1957
|
if (!raw)
|
|
2107
1958
|
throw new Error("Message body not available");
|
|
2108
1959
|
const parsed = await simpleParser(raw);
|
|
@@ -2166,14 +2017,10 @@ export class MailxService {
|
|
|
2166
2017
|
}
|
|
2167
2018
|
}
|
|
2168
2019
|
catch { /* non-fatal — draft stays in memory at least */ }
|
|
2169
|
-
// Background reconcile to server Drafts folder
|
|
2170
|
-
//
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
// Surface as an event so the UI can show a status-bar hint without
|
|
2174
|
-
// blocking the caller. Draft is preserved on disk regardless.
|
|
2175
|
-
this.emit?.("draftSaveDeferred", { accountId, draftId: id, error: String(e?.message || e) });
|
|
2176
|
-
});
|
|
2020
|
+
// Background reconcile to server Drafts folder via the SyncQueue
|
|
2021
|
+
// seam. Fire-and-forget; deferred failures surface as a `draftSaveDeferred`
|
|
2022
|
+
// event the UI can render in the status bar.
|
|
2023
|
+
this.syncQueue.enqueueDraftPush(accountId, raw, previousDraftUid, id);
|
|
2177
2024
|
return { draftUid: null, draftId: id };
|
|
2178
2025
|
}
|
|
2179
2026
|
async deleteDraft(accountId, draftUid, draftId) {
|
|
@@ -2184,7 +2031,7 @@ export class MailxService {
|
|
|
2184
2031
|
query = (query || "").trim();
|
|
2185
2032
|
if (query.length < 1)
|
|
2186
2033
|
return [];
|
|
2187
|
-
return this.
|
|
2034
|
+
return this.localStore.searchContacts(query);
|
|
2188
2035
|
}
|
|
2189
2036
|
/** Q49: boolean hint for compose to auto-expand Cc when replying to this
|
|
2190
2037
|
* address. True when at least one past sent message to the same recipient
|
|
@@ -2216,7 +2063,7 @@ export class MailxService {
|
|
|
2216
2063
|
}
|
|
2217
2064
|
/** Address-book listing — paginated, filterable. */
|
|
2218
2065
|
listContacts(query, page = 1, pageSize = 100) {
|
|
2219
|
-
return this.
|
|
2066
|
+
return this.localStore.listContacts(query || "", page, pageSize);
|
|
2220
2067
|
}
|
|
2221
2068
|
/** Upsert a contact from the address book UI (edit name). Two-way cache:
|
|
2222
2069
|
* commits locally, queues a Google People push. */
|