@bobfrankston/rmfmail 1.2.238 → 1.2.240
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/TODO.md +6 -0
- package/client/app.bundle.js +60 -17
- package/client/app.bundle.js.map +2 -2
- package/client/components/message-viewer.js +98 -58
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +93 -57
- package/package.json +1 -1
- package/packages/mailx-imap/index.d.ts +20 -0
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +64 -1
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +62 -1
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-imap/test/rate-limit-backoff.test.mjs +61 -0
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-types/package.json +1 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-55168 → node_modules.npmglobalize-stash-54868}/.package-lock.json +0 -0
|
@@ -1435,42 +1435,22 @@ export async function showMessage(accountId: string, uid: number, folderId?: num
|
|
|
1435
1435
|
_ptick("iframe srcdoc set");
|
|
1436
1436
|
installPreviewControls(iframe);
|
|
1437
1437
|
} else if (msg.bodyText) {
|
|
1438
|
-
|
|
1439
|
-
//
|
|
1440
|
-
// font, same size + line-height. Default `<pre>` rendering is
|
|
1441
|
-
// monospace, which on some platforms substitutes to a serif
|
|
1442
|
-
// fallback (Bob 2026-05-12: "why the font change") and looks
|
|
1443
|
-
// like a different message from the same conversation.
|
|
1444
|
-
// height:100% + overflow:auto make the <pre> its own scroll
|
|
1445
|
-
// container. Without them the <pre> grows to its full content
|
|
1446
|
-
// height and the parent .mv-body (overflow:hidden) silently
|
|
1447
|
-
// clips everything below the fold — no scrollbar, wheel dead
|
|
1448
|
-
// (Bob 2026-05-22). The HTML-body branch gets this for free via
|
|
1449
|
-
// the iframe; plain-text bodies need it explicitly.
|
|
1450
|
-
pre.style.cssText = "padding: 1rem; white-space: pre-wrap; word-break: break-word; "
|
|
1451
|
-
+ "font-family: system-ui, sans-serif; font-size: 17.5px; line-height: 1.5; "
|
|
1452
|
-
+ "color: #1a1a2e; background: #fff; margin: 0; height: 100%; overflow: auto;";
|
|
1453
|
-
// Auto-linkify URLs in plain text.
|
|
1438
|
+
// Plain text renders through the SAME sandboxed iframe as an HTML
|
|
1439
|
+
// body, as a <pre> of linkified text.
|
|
1454
1440
|
//
|
|
1455
|
-
//
|
|
1456
|
-
//
|
|
1457
|
-
//
|
|
1458
|
-
//
|
|
1459
|
-
//
|
|
1460
|
-
//
|
|
1461
|
-
//
|
|
1441
|
+
// It used to be a <pre> in the PARENT document, and that is why
|
|
1442
|
+
// "hovering over a URL or right mousing isn't working" in a
|
|
1443
|
+
// plain-text message (Bob 2026-08-09): every link affordance the
|
|
1444
|
+
// preview has — hover target, the right-click link menu (Open /
|
|
1445
|
+
// Copy link address / search), tap-to-open-externally — is
|
|
1446
|
+
// implemented for the iframe, by its injected script and its
|
|
1447
|
+
// contextmenu → previewContextMenu bridge. A detected URL isn't
|
|
1448
|
+
// "less of a URL" than an <a> the sender wrote, so it goes through
|
|
1449
|
+
// the same path and behaves identically, instead of the parent
|
|
1450
|
+
// document's generic fallback menu.
|
|
1462
1451
|
//
|
|
1463
|
-
//
|
|
1464
|
-
//
|
|
1465
|
-
// paint the first screenful immediately, then append the rest in
|
|
1466
|
-
// line-aligned chunks across animation frames. Same content, same
|
|
1467
|
-
// links, but the main thread comes up for air between chunks so
|
|
1468
|
-
// the app stays live and the text streams in visibly.
|
|
1469
|
-
if (msg.bodyText.length > PROGRESSIVE_TEXT_THRESHOLD) {
|
|
1470
|
-
renderTextProgressively(pre, msg.bodyText, gen);
|
|
1471
|
-
} else {
|
|
1472
|
-
pre.innerHTML = linkifyText(msg.bodyText);
|
|
1473
|
-
}
|
|
1452
|
+
// Same reason as every other unification today: two renderers for
|
|
1453
|
+
// one job means every fix lands in one of them.
|
|
1474
1454
|
// Oversized body: the service sent only the head, because the IPC
|
|
1475
1455
|
// channel marshals replies through evaluate_script and a multi-MB
|
|
1476
1456
|
// body takes the WebView2 renderer down with it. Say so — showing
|
|
@@ -1489,7 +1469,30 @@ export async function showMessage(accountId: string, uid: number, folderId?: num
|
|
|
1489
1469
|
<code style="user-select:all;font-size:0.9em">${escapeHtml(trunc.emlPath || "(path unavailable)")}</code></div>`;
|
|
1490
1470
|
bodyEl.appendChild(note);
|
|
1491
1471
|
}
|
|
1492
|
-
|
|
1472
|
+
|
|
1473
|
+
const iframe = document.createElement("iframe");
|
|
1474
|
+
iframe.sandbox.add("allow-same-origin");
|
|
1475
|
+
iframe.sandbox.add("allow-popups");
|
|
1476
|
+
iframe.sandbox.add("allow-popups-to-escape-sandbox");
|
|
1477
|
+
iframe.sandbox.add("allow-top-navigation-by-user-activation");
|
|
1478
|
+
iframe.sandbox.add("allow-scripts");
|
|
1479
|
+
// `rmf-plain` is styled by wrapHtmlBody so the typography matches
|
|
1480
|
+
// what the parent <pre> used to produce.
|
|
1481
|
+
const head = msg.bodyText.length > PROGRESSIVE_TEXT_THRESHOLD
|
|
1482
|
+
? msg.bodyText.slice(0, firstChunkEnd(msg.bodyText))
|
|
1483
|
+
: msg.bodyText;
|
|
1484
|
+
iframe.srcdoc = wrapHtmlBody(`<pre class="rmf-plain" id="rmf-plain">${linkifyText(head)}</pre>`, false);
|
|
1485
|
+
iframe.addEventListener("load", () => _ptick("iframe load (all resources)"), { once: true });
|
|
1486
|
+
bodyEl.appendChild(iframe);
|
|
1487
|
+
_ptick("iframe srcdoc set (plain text)");
|
|
1488
|
+
installPreviewControls(iframe);
|
|
1489
|
+
// Big body: stream the remainder into the iframe across animation
|
|
1490
|
+
// frames rather than parsing megabytes in one blocking gulp
|
|
1491
|
+
// (v1.2.229's reason, preserved — the work just happens inside the
|
|
1492
|
+
// iframe document now).
|
|
1493
|
+
if (msg.bodyText.length > head.length) {
|
|
1494
|
+
appendTextProgressively(iframe, msg.bodyText.slice(head.length), gen);
|
|
1495
|
+
}
|
|
1493
1496
|
} else {
|
|
1494
1497
|
// No bodyHtml AND no bodyText. The daemon thinks the body is
|
|
1495
1498
|
// on disk (`cached === true`) but extracted nothing. Most
|
|
@@ -1814,44 +1817,64 @@ const PROGRESSIVE_TEXT_THRESHOLD = 200 * 1024;
|
|
|
1814
1817
|
* a couple of dozen frames rather than hundreds. */
|
|
1815
1818
|
const TEXT_CHUNK_BYTES = 64 * 1024;
|
|
1816
1819
|
|
|
1820
|
+
/** Where the first chunk of a large plain-text body ends — cut on a newline
|
|
1821
|
+
* so a URL is never split across chunks (half a URL linkifies wrong). */
|
|
1822
|
+
function firstChunkEnd(text: string): number {
|
|
1823
|
+
const end = Math.min(TEXT_CHUNK_BYTES, text.length);
|
|
1824
|
+
if (end >= text.length) return text.length;
|
|
1825
|
+
const nl = text.lastIndexOf("\n", end);
|
|
1826
|
+
return nl > 0 ? nl + 1 : end;
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1817
1829
|
/**
|
|
1818
|
-
*
|
|
1819
|
-
* frame, linkifying each chunk as it goes.
|
|
1830
|
+
* Stream the rest of a large plain-text body into the preview iframe, one
|
|
1831
|
+
* line-aligned chunk per animation frame, linkifying each chunk as it goes.
|
|
1820
1832
|
*
|
|
1821
|
-
*
|
|
1822
|
-
*
|
|
1823
|
-
*
|
|
1824
|
-
*
|
|
1833
|
+
* Why chunked at all: linkify + HTML parse + layout over a multi-megabyte
|
|
1834
|
+
* body is synchronous, so doing it in one statement freezes the window long
|
|
1835
|
+
* enough for WebView2 to report the renderer unresponsive (Bob 2026-08-08,
|
|
1836
|
+
* "oh — just took forever"). A Web Worker cannot help: workers have no DOM,
|
|
1837
|
+
* and the DOM work IS the expensive half. Coming up for air between chunks is
|
|
1838
|
+
* what keeps the app live, and the text visibly streams in.
|
|
1825
1839
|
*
|
|
1826
|
-
* Aborts if the user moves to another message mid-render
|
|
1827
|
-
*
|
|
1840
|
+
* Aborts if the user moves to another message mid-render (`gen` against
|
|
1841
|
+
* showMessageGeneration, the same staleness guard the IPC path uses) or if
|
|
1842
|
+
* the iframe is torn out from under us.
|
|
1828
1843
|
*/
|
|
1829
|
-
function
|
|
1844
|
+
function appendTextProgressively(iframe: HTMLIFrameElement, rest: string, gen: number): void {
|
|
1830
1845
|
const chunks: string[] = [];
|
|
1831
1846
|
let at = 0;
|
|
1832
|
-
while (at <
|
|
1833
|
-
let end = Math.min(at + TEXT_CHUNK_BYTES,
|
|
1834
|
-
if (end <
|
|
1835
|
-
const nl =
|
|
1847
|
+
while (at < rest.length) {
|
|
1848
|
+
let end = Math.min(at + TEXT_CHUNK_BYTES, rest.length);
|
|
1849
|
+
if (end < rest.length) {
|
|
1850
|
+
const nl = rest.lastIndexOf("\n", end);
|
|
1836
1851
|
if (nl > at) end = nl + 1;
|
|
1837
1852
|
}
|
|
1838
|
-
chunks.push(
|
|
1853
|
+
chunks.push(rest.slice(at, end));
|
|
1839
1854
|
at = end;
|
|
1840
1855
|
}
|
|
1841
1856
|
let i = 0;
|
|
1842
1857
|
const step = (): void => {
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1858
|
+
if (gen !== showMessageGeneration) return; // another message is on screen
|
|
1859
|
+
const doc = iframe.contentDocument;
|
|
1860
|
+
const host = doc?.getElementById("rmf-plain");
|
|
1861
|
+
if (!doc || !host) return; // iframe replaced or not ready
|
|
1846
1862
|
if (i >= chunks.length) return;
|
|
1847
|
-
const span =
|
|
1863
|
+
const span = doc.createElement("span");
|
|
1848
1864
|
span.innerHTML = linkifyText(chunks[i++]);
|
|
1849
|
-
|
|
1865
|
+
host.appendChild(span);
|
|
1850
1866
|
requestAnimationFrame(step);
|
|
1851
1867
|
};
|
|
1852
|
-
//
|
|
1853
|
-
//
|
|
1854
|
-
|
|
1868
|
+
// The iframe document may not exist for a frame or two after srcdoc is
|
|
1869
|
+
// set; poll briefly rather than dropping the tail on the floor.
|
|
1870
|
+
let waits = 0;
|
|
1871
|
+
const begin = (): void => {
|
|
1872
|
+
if (gen !== showMessageGeneration) return;
|
|
1873
|
+
if (iframe.contentDocument?.getElementById("rmf-plain")) { step(); return; }
|
|
1874
|
+
if (waits++ > 120) return; // ~2 s at 60 fps — give up quietly
|
|
1875
|
+
requestAnimationFrame(begin);
|
|
1876
|
+
};
|
|
1877
|
+
requestAnimationFrame(begin);
|
|
1855
1878
|
}
|
|
1856
1879
|
|
|
1857
1880
|
function linkifyText(text: string): string {
|
|
@@ -2020,6 +2043,19 @@ ${csp}
|
|
|
2020
2043
|
img { max-width: 100%; }
|
|
2021
2044
|
a { color: #1a6dd4; }
|
|
2022
2045
|
pre, code { white-space: pre-wrap; }
|
|
2046
|
+
/* Plain-text bodies render as this <pre>. Sans-serif at the same size and
|
|
2047
|
+
line-height as an HTML body, so two messages in one thread don't look
|
|
2048
|
+
like they came from different apps (Bob 2026-05-12: "why the font
|
|
2049
|
+
change"). */
|
|
2050
|
+
.rmf-plain {
|
|
2051
|
+
margin: 0;
|
|
2052
|
+
padding: 0;
|
|
2053
|
+
font-family: system-ui, sans-serif;
|
|
2054
|
+
font-size: 17.5px;
|
|
2055
|
+
line-height: 1.5;
|
|
2056
|
+
white-space: pre-wrap;
|
|
2057
|
+
word-break: break-word;
|
|
2058
|
+
}
|
|
2023
2059
|
blockquote { border-left: 3px solid #ccc; padding-left: 1rem; margin-left: 0; color: #666; }
|
|
2024
2060
|
@media (prefers-color-scheme: dark) {
|
|
2025
2061
|
body { color: #cdd6f4; background: #282840; }
|
package/package.json
CHANGED
|
@@ -77,6 +77,18 @@ export declare class ImapManager extends EventEmitter {
|
|
|
77
77
|
* (rate limits, network) are NOT recorded here — they keep the normal
|
|
78
78
|
* 60s deadman cadence. */
|
|
79
79
|
private watchAuthFailed;
|
|
80
|
+
/** Accounts the SERVER has told us to back off, with when they may be
|
|
81
|
+
* tried again and how many consecutive refusals we've had.
|
|
82
|
+
*
|
|
83
|
+
* AOL/Yahoo answer an over-quota LOGIN with `[LIMIT] LOGIN Rate limit
|
|
84
|
+
* hit.` — an explicit instruction, not a transient blip. mailx used to
|
|
85
|
+
* treat it as transient and keep the 60 s deadman cadence, so every
|
|
86
|
+
* refusal was followed by another LOGIN a minute later: measured on
|
|
87
|
+
* 2026-08-09, four separate runs of 4–22 minutes, one failed attempt per
|
|
88
|
+
* minute throughout, every one of them spending quota that keeps the
|
|
89
|
+
* limiter hot. Backing off is not politeness, it is how the account
|
|
90
|
+
* becomes usable again sooner. */
|
|
91
|
+
private rateLimited;
|
|
80
92
|
private fetchClients;
|
|
81
93
|
/** The Store is the architectural nexus — owner of MailxDB +
|
|
82
94
|
* FileMessageStore + the event bus. This package (mailx-imap) is a
|
|
@@ -243,6 +255,14 @@ export declare class ImapManager extends EventEmitter {
|
|
|
243
255
|
* client; the slot is released when logout() or destroy() runs.
|
|
244
256
|
* `purpose` is a short tag printed alongside the `[conn+]` log so we can
|
|
245
257
|
* tell which code path (ops/idle/etc.) opened each connection. */
|
|
258
|
+
/** Remaining cooldown in ms for an account the server rate-limited, or 0. */
|
|
259
|
+
rateLimitRemaining(accountId: string): number;
|
|
260
|
+
/** Record a server rate-limit refusal and widen the cooldown. 5 → 10 → 20
|
|
261
|
+
* → 30 min (capped): long enough to actually clear AOL's window, short
|
|
262
|
+
* enough that a mistake costs one poll cycle rather than an afternoon. */
|
|
263
|
+
private noteRateLimited;
|
|
264
|
+
/** Clear the cooldown after a connection succeeds. */
|
|
265
|
+
private noteRateLimitCleared;
|
|
246
266
|
private newClient;
|
|
247
267
|
/** Force-close every IMAP socket for an account — both lane clients
|
|
248
268
|
* (ops + fast) plus any lingering ones in openClients (e.g. an IDLE
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -219,6 +219,18 @@ export class ImapManager extends EventEmitter {
|
|
|
219
219
|
* (rate limits, network) are NOT recorded here — they keep the normal
|
|
220
220
|
* 60s deadman cadence. */
|
|
221
221
|
watchAuthFailed = new Map();
|
|
222
|
+
/** Accounts the SERVER has told us to back off, with when they may be
|
|
223
|
+
* tried again and how many consecutive refusals we've had.
|
|
224
|
+
*
|
|
225
|
+
* AOL/Yahoo answer an over-quota LOGIN with `[LIMIT] LOGIN Rate limit
|
|
226
|
+
* hit.` — an explicit instruction, not a transient blip. mailx used to
|
|
227
|
+
* treat it as transient and keep the 60 s deadman cadence, so every
|
|
228
|
+
* refusal was followed by another LOGIN a minute later: measured on
|
|
229
|
+
* 2026-08-09, four separate runs of 4–22 minutes, one failed attempt per
|
|
230
|
+
* minute throughout, every one of them spending quota that keeps the
|
|
231
|
+
* limiter hot. Backing off is not politeness, it is how the account
|
|
232
|
+
* becomes usable again sooner. */
|
|
233
|
+
rateLimited = new Map();
|
|
222
234
|
fetchClients = new Map();
|
|
223
235
|
/** The Store is the architectural nexus — owner of MailxDB +
|
|
224
236
|
* FileMessageStore + the event bus. This package (mailx-imap) is a
|
|
@@ -277,7 +289,7 @@ export class ImapManager extends EventEmitter {
|
|
|
277
289
|
else if (/UNAVAILABLE|Maximum number of connections|too many connections/i.test(errMsg)) {
|
|
278
290
|
d.connCapHits++;
|
|
279
291
|
}
|
|
280
|
-
else if (/429|rate limit/i.test(errMsg)) {
|
|
292
|
+
else if (/429|rate limit|\[LIMIT\]/i.test(errMsg)) {
|
|
281
293
|
d.rateLimitWaits++;
|
|
282
294
|
}
|
|
283
295
|
else {
|
|
@@ -894,7 +906,47 @@ export class ImapManager extends EventEmitter {
|
|
|
894
906
|
* client; the slot is released when logout() or destroy() runs.
|
|
895
907
|
* `purpose` is a short tag printed alongside the `[conn+]` log so we can
|
|
896
908
|
* tell which code path (ops/idle/etc.) opened each connection. */
|
|
909
|
+
/** Remaining cooldown in ms for an account the server rate-limited, or 0. */
|
|
910
|
+
rateLimitRemaining(accountId) {
|
|
911
|
+
const e = this.rateLimited.get(accountId);
|
|
912
|
+
if (!e)
|
|
913
|
+
return 0;
|
|
914
|
+
const left = e.until - Date.now();
|
|
915
|
+
if (left <= 0) {
|
|
916
|
+
this.rateLimited.delete(accountId);
|
|
917
|
+
return 0;
|
|
918
|
+
}
|
|
919
|
+
return left;
|
|
920
|
+
}
|
|
921
|
+
/** Record a server rate-limit refusal and widen the cooldown. 5 → 10 → 20
|
|
922
|
+
* → 30 min (capped): long enough to actually clear AOL's window, short
|
|
923
|
+
* enough that a mistake costs one poll cycle rather than an afternoon. */
|
|
924
|
+
noteRateLimited(accountId, errMsg) {
|
|
925
|
+
const prev = this.rateLimited.get(accountId);
|
|
926
|
+
const strikes = (prev?.strikes || 0) + 1;
|
|
927
|
+
const mins = Math.min(30, 5 * Math.pow(2, strikes - 1));
|
|
928
|
+
const until = Date.now() + mins * 60_000;
|
|
929
|
+
this.rateLimited.set(accountId, { until, strikes });
|
|
930
|
+
console.warn(` [rate-limit] ${accountId}: server said "${errMsg.trim().slice(0, 60)}" — pausing ALL lanes for ${mins} min (strike ${strikes})`);
|
|
931
|
+
this.emit("rateLimited", { accountId, untilMs: until, minutes: mins, strikes });
|
|
932
|
+
}
|
|
933
|
+
/** Clear the cooldown after a connection succeeds. */
|
|
934
|
+
noteRateLimitCleared(accountId) {
|
|
935
|
+
if (this.rateLimited.delete(accountId)) {
|
|
936
|
+
console.log(` [rate-limit] ${accountId}: connection accepted again — cooldown cleared`);
|
|
937
|
+
this.emit("rateLimitCleared", { accountId });
|
|
938
|
+
}
|
|
939
|
+
}
|
|
897
940
|
async newClient(accountId, purpose = "?") {
|
|
941
|
+
// Refuse to spend a LOGIN the server has already told us it will not
|
|
942
|
+
// accept. Every lane funnels through newClient, so one check covers
|
|
943
|
+
// sync, quickCheck, IDLE, outbox and fetch alike — which matters,
|
|
944
|
+
// because the lanes retry independently and would otherwise take turns
|
|
945
|
+
// poking the limiter.
|
|
946
|
+
const cooldown = this.rateLimitRemaining(accountId);
|
|
947
|
+
if (cooldown > 0) {
|
|
948
|
+
throw new Error(`rate-limited by server — retrying in ${Math.ceil(cooldown / 60_000)} min (no LOGIN attempted)`);
|
|
949
|
+
}
|
|
898
950
|
if (this.reauthenticating.has(accountId))
|
|
899
951
|
throw new Error(`Account ${accountId} is re-authenticating`);
|
|
900
952
|
const config = this.configs.get(accountId);
|
|
@@ -985,11 +1037,22 @@ export class ImapManager extends EventEmitter {
|
|
|
985
1037
|
const sock = client?.native?.transport?.socket;
|
|
986
1038
|
if (typeof sock?.once === "function")
|
|
987
1039
|
sock.once("close", () => markClosed("socket-close"));
|
|
1040
|
+
// A LOGIN the server accepted is the only proof the
|
|
1041
|
+
// cooldown is over — clear it here rather than letting
|
|
1042
|
+
// it lapse on a timer alone.
|
|
1043
|
+
this.noteRateLimitCleared(accountId);
|
|
988
1044
|
return r;
|
|
989
1045
|
}
|
|
990
1046
|
catch (e) {
|
|
991
1047
|
emitPhase("failed", e?.message || String(e));
|
|
992
1048
|
markClosed("connect-failed");
|
|
1049
|
+
// Every lane (sync, quickCheck, IDLE, outbox, fetch)
|
|
1050
|
+
// connects through here, so this one line is what makes
|
|
1051
|
+
// a rate-limit refusal stop ALL of them instead of each
|
|
1052
|
+
// discovering it separately, once a minute, forever.
|
|
1053
|
+
const em = e?.message || String(e);
|
|
1054
|
+
if (/[LIMIT]|rate limit/i.test(em))
|
|
1055
|
+
this.noteRateLimited(accountId, em);
|
|
993
1056
|
throw e;
|
|
994
1057
|
}
|
|
995
1058
|
};
|