@bobfrankston/rmfmail 1.2.217 → 1.2.220
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 +77 -1
- package/bin/mailx.js.map +1 -1
- package/bin/mailx.ts +68 -1
- package/client/prewarm.html +16 -0
- package/package.json +7 -7
- package/packages/mailx-imap/index.d.ts +17 -0
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +91 -3
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +84 -4
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +63 -15
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +50 -14
- package/packages/mailx-service/package.json +1 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-36516 → node_modules.npmglobalize-stash-142156}/.package-lock.json +0 -0
package/bin/mailx.ts
CHANGED
|
@@ -2095,6 +2095,16 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
|
|
|
2095
2095
|
// main-window shutdown log line to prove/refute the "closing a popout
|
|
2096
2096
|
// closes the main window" coupling (Bob 2026-07-06, unreproduced).
|
|
2097
2097
|
let lastPopoutClose: { at: number; key: string } | null = null;
|
|
2098
|
+
/** Hidden window that keeps the "popout" WebView2 profile's browser
|
|
2099
|
+
* process warm — see the prewarm block below showService. Deliberately
|
|
2100
|
+
* NOT in popoutWindows: it is infrastructure, not a user window, and must
|
|
2101
|
+
* not show up in the shutdown popout census. */
|
|
2102
|
+
let prewarmHandle: ReturnType<typeof showMessageBoxEx> | null = null;
|
|
2103
|
+
/** How long after boot to warm the popout profile. Late enough that it
|
|
2104
|
+
* isn't racing the MAIN window's own WebView creation for the same CPU,
|
|
2105
|
+
* early enough to beat a user reaching for ^N (the 2026-08-05 case was at
|
|
2106
|
+
* boot + 18s). */
|
|
2107
|
+
const PREWARM_DELAY_MS = 6000;
|
|
2098
2108
|
const popoutKey = (a: string, f: number | undefined, u: number): string => `${a}|${f ?? ""}|${u}`;
|
|
2099
2109
|
try {
|
|
2100
2110
|
const { startPopoutServer } = await import("./popout-server.js");
|
|
@@ -2473,6 +2483,51 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
|
|
|
2473
2483
|
return { ok: true };
|
|
2474
2484
|
});
|
|
2475
2485
|
}
|
|
2486
|
+
// Pre-warm the "popout" WebView2 profile.
|
|
2487
|
+
//
|
|
2488
|
+
// Every secondary window (compose, message popout, extra main window) runs
|
|
2489
|
+
// on profile "popout" — deliberately NOT the main window's profile, so a
|
|
2490
|
+
// crash there can't black out the main window (S67). The cost is that the
|
|
2491
|
+
// FIRST popout of a session pays for cold-starting an entire WebView2
|
|
2492
|
+
// browser process for that profile, and if the daemon is busy with initial
|
|
2493
|
+
// sync at the time, that cold start is not cheap: ^N 18 seconds after boot
|
|
2494
|
+
// on 2026-08-05 sat on a blank window for 59.4 SECONDS, all of it inside
|
|
2495
|
+
// WebViewBuilder::build() before a line of compose JS could run (the page
|
|
2496
|
+
// itself then rendered in 397ms). Nothing the page can do about it — there
|
|
2497
|
+
// is no WebView yet to draw a spinner into.
|
|
2498
|
+
//
|
|
2499
|
+
// So pay it up front, off the user's critical path: one hidden window on
|
|
2500
|
+
// that profile, opened a few seconds after boot (late enough not to
|
|
2501
|
+
// compete with the main window's own WebView creation), held open for the
|
|
2502
|
+
// life of the daemon so the browser process stays warm. Hidden windows
|
|
2503
|
+
// still create their WebView, which is the whole point.
|
|
2504
|
+
if (popoutInfo) {
|
|
2505
|
+
const pi3 = popoutInfo;
|
|
2506
|
+
setTimeout(() => {
|
|
2507
|
+
const t0 = Date.now();
|
|
2508
|
+
try {
|
|
2509
|
+
const h = showMessageBoxEx({
|
|
2510
|
+
title: "rmfmail (prewarm)",
|
|
2511
|
+
url: `http://127.0.0.1:${pi3.port}/app/${pi3.token}/client/prewarm.html`,
|
|
2512
|
+
size: { width: 200, height: 100 },
|
|
2513
|
+
hidden: true,
|
|
2514
|
+
focusOnCreate: false,
|
|
2515
|
+
aumid: "com.frankston.rmfmail",
|
|
2516
|
+
profile: "popout",
|
|
2517
|
+
});
|
|
2518
|
+
prewarmHandle = h;
|
|
2519
|
+
if (typeof h.pid === "number") addChildPid(h.pid);
|
|
2520
|
+
console.log(` [prewarm] popout WebView2 profile warming (pid=${h.pid ?? "?"})`);
|
|
2521
|
+
void h.result.catch(() => { /* closed with the daemon */ }).finally(() => {
|
|
2522
|
+
if (typeof h.pid === "number") removeChildPid(h.pid);
|
|
2523
|
+
console.log(` [prewarm] popout profile window closed after ${Date.now() - t0}ms`);
|
|
2524
|
+
});
|
|
2525
|
+
} catch (e: any) {
|
|
2526
|
+
// Never fatal — a cold first popout is slow, not broken.
|
|
2527
|
+
console.log(` [prewarm] skipped: ${e?.message || e}`);
|
|
2528
|
+
}
|
|
2529
|
+
}, PREWARM_DELAY_MS);
|
|
2530
|
+
}
|
|
2476
2531
|
_tick("calling showService (WebView opens here)");
|
|
2477
2532
|
const handle = showService({
|
|
2478
2533
|
title: `rmfmail v${rootPkgVersion}`,
|
|
@@ -2549,6 +2604,9 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
|
|
|
2549
2604
|
const inst = readInstanceFile();
|
|
2550
2605
|
if (inst && inst.pid === process.pid) clearInstanceFile();
|
|
2551
2606
|
try { handle.close(); } catch { /* already gone */ }
|
|
2607
|
+
// Hidden and therefore invisible to the user if orphaned — close it on
|
|
2608
|
+
// every exit path, not just gracefulShutdown.
|
|
2609
|
+
try { prewarmHandle?.close?.(); } catch { /* already gone */ }
|
|
2552
2610
|
};
|
|
2553
2611
|
process.once("exit", __cleanupInstance);
|
|
2554
2612
|
process.once("SIGINT", () => { __cleanupInstance(); process.exit(0); });
|
|
@@ -3158,6 +3216,10 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
|
|
|
3158
3216
|
if (shuttingDown) return;
|
|
3159
3217
|
shuttingDown = true;
|
|
3160
3218
|
console.log(`${reason} — shutting down`);
|
|
3219
|
+
// The prewarm window is hidden, so an orphaned one is invisible AND
|
|
3220
|
+
// unkillable by the user — close it explicitly rather than relying on
|
|
3221
|
+
// child-process cascade.
|
|
3222
|
+
try { prewarmHandle?.close?.(); } catch { /* already gone */ }
|
|
3161
3223
|
imapManager.stopPeriodicSync();
|
|
3162
3224
|
imapManager.stopOutboxWorker();
|
|
3163
3225
|
// 3s hard timeout — don't hang on broken IMAP connections
|
|
@@ -3210,7 +3272,12 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
|
|
|
3210
3272
|
const popoutDelta = lastPopoutClose
|
|
3211
3273
|
? `; last popout closed ${Date.now() - lastPopoutClose.at}ms ago (${lastPopoutClose.key})`
|
|
3212
3274
|
: "; no popout closed this session";
|
|
3213
|
-
|
|
3275
|
+
// Name the still-tracked popouts, not just the count. "2 popout window(s)
|
|
3276
|
+
// still tracked" (2026-08-05) was unactionable: two legitimately-open
|
|
3277
|
+
// compose windows and two entries whose close handler never fired look
|
|
3278
|
+
// identical from a bare count.
|
|
3279
|
+
const popoutKeys = popoutWindows.size > 0 ? ` [${[...popoutWindows.keys()].join(", ")}]` : "";
|
|
3280
|
+
await gracefulShutdown(`Window closed (main service child; ${popoutWindows.size} popout window(s) still tracked${popoutKeys}${popoutDelta})`);
|
|
3214
3281
|
}
|
|
3215
3282
|
|
|
3216
3283
|
main().catch(console.error);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>rmfmail prewarm</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<!--
|
|
9
|
+
Deliberately empty. This page exists only to give the hidden prewarm window
|
|
10
|
+
something to load so the "popout" WebView2 profile's browser process starts
|
|
11
|
+
during boot instead of during the user's first Ctrl+N. Loading nothing real
|
|
12
|
+
is the point: no script, no fetch, no IPC. See the prewarm block in
|
|
13
|
+
bin/mailx.ts.
|
|
14
|
+
-->
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/rmfmail",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.220",
|
|
4
4
|
"description": "Local-first email client with IMAP sync and standalone native app",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "bin/mailx.js",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@bobfrankston/iflow-direct": "^0.1.65",
|
|
38
38
|
"@bobfrankston/mailx-host": "^0.1.14",
|
|
39
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
39
|
+
"@bobfrankston/mailx-imap": "^0.1.143",
|
|
40
40
|
"@bobfrankston/mailx-store-web": "^0.1.69",
|
|
41
41
|
"@bobfrankston/mailx-sync": "^0.1.29",
|
|
42
|
-
"@bobfrankston/miscinfo": "^1.0.
|
|
43
|
-
"@bobfrankston/msger": "^0.1.
|
|
42
|
+
"@bobfrankston/miscinfo": "^1.0.16",
|
|
43
|
+
"@bobfrankston/msger": "^0.1.422",
|
|
44
44
|
"@bobfrankston/node-tcp-transport": "^0.1.10",
|
|
45
45
|
"@bobfrankston/oauthsupport": "^1.0.34",
|
|
46
46
|
"@bobfrankston/rmf-tiny": "^0.1.43",
|
|
@@ -116,11 +116,11 @@
|
|
|
116
116
|
"dependencies": {
|
|
117
117
|
"@bobfrankston/iflow-direct": "^0.1.65",
|
|
118
118
|
"@bobfrankston/mailx-host": "^0.1.14",
|
|
119
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
119
|
+
"@bobfrankston/mailx-imap": "^0.1.143",
|
|
120
120
|
"@bobfrankston/mailx-store-web": "^0.1.69",
|
|
121
121
|
"@bobfrankston/mailx-sync": "^0.1.29",
|
|
122
|
-
"@bobfrankston/miscinfo": "^1.0.
|
|
123
|
-
"@bobfrankston/msger": "^0.1.
|
|
122
|
+
"@bobfrankston/miscinfo": "^1.0.16",
|
|
123
|
+
"@bobfrankston/msger": "^0.1.422",
|
|
124
124
|
"@bobfrankston/node-tcp-transport": "^0.1.10",
|
|
125
125
|
"@bobfrankston/oauthsupport": "^1.0.34",
|
|
126
126
|
"@bobfrankston/rmf-tiny": "^0.1.43",
|
|
@@ -60,6 +60,23 @@ export declare class ImapManager extends EventEmitter {
|
|
|
60
60
|
private configs;
|
|
61
61
|
private watchers;
|
|
62
62
|
private watcherClients;
|
|
63
|
+
/** Accounts whose IDLE watcher is mid-establish. `watchers` only gains an
|
|
64
|
+
* entry AFTER connect+login+SELECT+IDLE completes (seconds), so two
|
|
65
|
+
* overlapping startWatching() sweeps both see "no watcher" and both open
|
|
66
|
+
* a socket — a duplicate IDLE connection per account. Bob 2026-08-05:
|
|
67
|
+
* boot's startWatching was still in flight when the 60s deadman fired,
|
|
68
|
+
* giving two watchers each for bobma/gmail and pushing aol into
|
|
69
|
+
* "[LIMIT] LOGIN Rate limit hit". This set closes that window. */
|
|
70
|
+
private watchStarting;
|
|
71
|
+
/** Accounts whose IDLE watcher was refused for a CREDENTIAL reason, with
|
|
72
|
+
* the error text. Retrying those every 60s forever is pure waste: the
|
|
73
|
+
* outlook account has failed `AUTHENTICATE failed.` on every boot for
|
|
74
|
+
* weeks (its mail syncs over Graph, so nothing is lost — but each attempt
|
|
75
|
+
* burns a connection slot and buries the log). Suppressed until the
|
|
76
|
+
* account re-authenticates, which clears the entry. Transient refusals
|
|
77
|
+
* (rate limits, network) are NOT recorded here — they keep the normal
|
|
78
|
+
* 60s deadman cadence. */
|
|
79
|
+
private watchAuthFailed;
|
|
63
80
|
private fetchClients;
|
|
64
81
|
/** The Store is the architectural nexus — owner of MailxDB +
|
|
65
82
|
* FileMessageStore + the event bus. This package (mailx-imap) is a
|
|
@@ -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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"}
|
|
@@ -202,6 +202,23 @@ export class ImapManager extends EventEmitter {
|
|
|
202
202
|
// (folder syncs holding all permits, timing out at 360s), leaving new mail
|
|
203
203
|
// on 5-min polling for minutes at a time (Bob 2026-05-28).
|
|
204
204
|
watcherClients = new Map();
|
|
205
|
+
/** Accounts whose IDLE watcher is mid-establish. `watchers` only gains an
|
|
206
|
+
* entry AFTER connect+login+SELECT+IDLE completes (seconds), so two
|
|
207
|
+
* overlapping startWatching() sweeps both see "no watcher" and both open
|
|
208
|
+
* a socket — a duplicate IDLE connection per account. Bob 2026-08-05:
|
|
209
|
+
* boot's startWatching was still in flight when the 60s deadman fired,
|
|
210
|
+
* giving two watchers each for bobma/gmail and pushing aol into
|
|
211
|
+
* "[LIMIT] LOGIN Rate limit hit". This set closes that window. */
|
|
212
|
+
watchStarting = new Set();
|
|
213
|
+
/** Accounts whose IDLE watcher was refused for a CREDENTIAL reason, with
|
|
214
|
+
* the error text. Retrying those every 60s forever is pure waste: the
|
|
215
|
+
* outlook account has failed `AUTHENTICATE failed.` on every boot for
|
|
216
|
+
* weeks (its mail syncs over Graph, so nothing is lost — but each attempt
|
|
217
|
+
* burns a connection slot and buries the log). Suppressed until the
|
|
218
|
+
* account re-authenticates, which clears the entry. Transient refusals
|
|
219
|
+
* (rate limits, network) are NOT recorded here — they keep the normal
|
|
220
|
+
* 60s deadman cadence. */
|
|
221
|
+
watchAuthFailed = new Map();
|
|
205
222
|
fetchClients = new Map();
|
|
206
223
|
/** The Store is the architectural nexus — owner of MailxDB +
|
|
207
224
|
* FileMessageStore + the event bus. This package (mailx-imap) is a
|
|
@@ -363,6 +380,9 @@ export class ImapManager extends EventEmitter {
|
|
|
363
380
|
if (config?.tokenProvider) {
|
|
364
381
|
console.log(` [reauth] ${accountId}: success`);
|
|
365
382
|
this.accountErrorShown.delete(accountId);
|
|
383
|
+
// Fresh credentials — let IDLE try again on an account whose
|
|
384
|
+
// watcher was suppressed for an auth failure.
|
|
385
|
+
this.watchAuthFailed.delete(accountId);
|
|
366
386
|
this.syncInbox().catch(() => { });
|
|
367
387
|
return true;
|
|
368
388
|
}
|
|
@@ -895,6 +915,15 @@ export class ImapManager extends EventEmitter {
|
|
|
895
915
|
const skipSemaphore = purpose === "idle";
|
|
896
916
|
const releaseHostSlot = skipSemaphore ? (() => { }) : await this.acquireHostSlot(host);
|
|
897
917
|
let client;
|
|
918
|
+
// Forward declaration: the connect wrapper below is DEFINED here but
|
|
919
|
+
// only CALLED after newClient returns, by which time the real
|
|
920
|
+
// markClosed is installed. A connect that throws (aol "[LIMIT] LOGIN
|
|
921
|
+
// Rate limit hit", outlook "AUTHENTICATE failed") used to leave the
|
|
922
|
+
// client registered in openClients forever AND never release its host
|
|
923
|
+
// semaphore permit — the counter climbed to 141 over a 37-hour session
|
|
924
|
+
// (Bob 2026-08-05 shutdown log) and every leaked permit is one fewer
|
|
925
|
+
// concurrent connection that account can ever open again.
|
|
926
|
+
let markClosed = () => { };
|
|
898
927
|
try {
|
|
899
928
|
// Verbose IMAP wire trace — diagnostic for silently-hanging
|
|
900
929
|
// commands. It was left permanently ON for the ops/fast lanes, but
|
|
@@ -946,10 +975,21 @@ export class ImapManager extends EventEmitter {
|
|
|
946
975
|
const total = Date.now() - connT0;
|
|
947
976
|
if (total > 3000)
|
|
948
977
|
console.log(` [conn-slow] ${accountId} (${purpose}): connect took ${total}ms — ${phaseTimings()}`);
|
|
978
|
+
// A socket that dies on its own — server drop, TLS
|
|
979
|
+
// reset, idle timeout — never routes through
|
|
980
|
+
// logout()/destroy(), so without this the connection
|
|
981
|
+
// stays "open" in our books and its semaphore permit
|
|
982
|
+
// is gone for the life of the process. Node always
|
|
983
|
+
// emits 'close' after 'error', so one listener covers
|
|
984
|
+
// both.
|
|
985
|
+
const sock = client?.native?.transport?.socket;
|
|
986
|
+
if (typeof sock?.once === "function")
|
|
987
|
+
sock.once("close", () => markClosed("socket-close"));
|
|
949
988
|
return r;
|
|
950
989
|
}
|
|
951
990
|
catch (e) {
|
|
952
991
|
emitPhase("failed", e?.message || String(e));
|
|
992
|
+
markClosed("connect-failed");
|
|
953
993
|
throw e;
|
|
954
994
|
}
|
|
955
995
|
};
|
|
@@ -967,10 +1007,17 @@ export class ImapManager extends EventEmitter {
|
|
|
967
1007
|
open.add(client);
|
|
968
1008
|
console.log(` [conn+] ${accountId} (${purpose}) — ${open.size} open`);
|
|
969
1009
|
let closed = false;
|
|
970
|
-
|
|
1010
|
+
markClosed = (how) => {
|
|
971
1011
|
if (closed)
|
|
972
1012
|
return;
|
|
973
1013
|
closed = true;
|
|
1014
|
+
// Flag the client itself so the IDLE watcher health-check (which
|
|
1015
|
+
// inspects `_dead` alongside the raw socket state) re-establishes
|
|
1016
|
+
// a watcher whose socket died under it.
|
|
1017
|
+
try {
|
|
1018
|
+
client._dead = true;
|
|
1019
|
+
}
|
|
1020
|
+
catch { /* frozen client — the socket checks still catch it */ }
|
|
974
1021
|
open.delete(client);
|
|
975
1022
|
releaseHostSlot();
|
|
976
1023
|
console.log(` [conn-] ${accountId} (${purpose}/${how}) — ${open.size} open`);
|
|
@@ -3101,15 +3148,28 @@ export class ImapManager extends EventEmitter {
|
|
|
3101
3148
|
// accounts with healthy IDLE are skipped). One log line per
|
|
3102
3149
|
// detected gap so a chronically failing account is obvious in
|
|
3103
3150
|
// the log.
|
|
3151
|
+
//
|
|
3152
|
+
// startWatching() sweeps EVERY account, so it must be called at most
|
|
3153
|
+
// once per tick: the old per-account call meant N missing accounts →
|
|
3154
|
+
// N concurrent sweeps, and since `watchers` is only populated after
|
|
3155
|
+
// the connect completes, every sweep opened its own socket for every
|
|
3156
|
+
// account (Bob 2026-08-05 boot: two IDLE watchers each for bobma and
|
|
3157
|
+
// gmail, aol refused with "[LIMIT] LOGIN Rate limit hit").
|
|
3104
3158
|
const deadmanInterval = setInterval(() => {
|
|
3159
|
+
const missing = [];
|
|
3105
3160
|
for (const [accountId] of this.configs) {
|
|
3106
3161
|
if (this.isApiAccount(accountId))
|
|
3107
3162
|
continue; // Gmail/Outlook = API, no IDLE
|
|
3108
3163
|
if (this.watchers.has(accountId))
|
|
3109
3164
|
continue;
|
|
3110
|
-
|
|
3111
|
-
|
|
3165
|
+
if (this.watchStarting.has(accountId))
|
|
3166
|
+
continue; // first attempt still connecting
|
|
3167
|
+
missing.push(accountId);
|
|
3112
3168
|
}
|
|
3169
|
+
if (missing.length === 0)
|
|
3170
|
+
return;
|
|
3171
|
+
console.log(` [idle-deadman] no IDLE watcher for ${missing.join(", ")} — attempting restart`);
|
|
3172
|
+
this.startWatching().catch(e => console.error(` [idle-deadman] restart failed: ${e?.message || e}`));
|
|
3113
3173
|
}, 60_000);
|
|
3114
3174
|
this.syncIntervals.set("idle-deadman", deadmanInterval);
|
|
3115
3175
|
// Sync actions (sends + flags/deletes/moves) every 30 seconds — skip during active sync
|
|
@@ -3206,6 +3266,20 @@ export class ImapManager extends EventEmitter {
|
|
|
3206
3266
|
this.watchers.delete(accountId);
|
|
3207
3267
|
this.watcherClients.delete(accountId);
|
|
3208
3268
|
}
|
|
3269
|
+
// Another sweep is already connecting this account. `watchers`
|
|
3270
|
+
// stays empty for the whole connect+login+SELECT+IDLE round trip,
|
|
3271
|
+
// so without this the second sweep opens a duplicate IDLE socket
|
|
3272
|
+
// (and on connection-limited servers the duplicate is what gets
|
|
3273
|
+
// refused). See the watchStarting field comment.
|
|
3274
|
+
if (this.watchStarting.has(accountId)) {
|
|
3275
|
+
console.log(` [idle] ${accountId}: watcher already being established — skipping duplicate`);
|
|
3276
|
+
continue;
|
|
3277
|
+
}
|
|
3278
|
+
// Credentials were refused last time. Don't re-offer them every
|
|
3279
|
+
// 60s — wait for a re-auth to clear this. See watchAuthFailed.
|
|
3280
|
+
if (this.watchAuthFailed.has(accountId))
|
|
3281
|
+
continue;
|
|
3282
|
+
this.watchStarting.add(accountId);
|
|
3209
3283
|
try {
|
|
3210
3284
|
// IDLE keeps its own dedicated socket — once the connection
|
|
3211
3285
|
// is parked in IDLE, it's unusable for any other command, so
|
|
@@ -3305,6 +3379,20 @@ export class ImapManager extends EventEmitter {
|
|
|
3305
3379
|
? parts.join(" ")
|
|
3306
3380
|
: `<no message> ${typeof e} ${e?.constructor?.name || ""}`.trim();
|
|
3307
3381
|
console.error(` [idle] Failed to watch ${accountId}: ${desc}`);
|
|
3382
|
+
// Separate "these credentials are wrong" from "the server is
|
|
3383
|
+
// busy right now". A rate limit ([LIMIT] LOGIN Rate limit hit
|
|
3384
|
+
// — aol does this when we over-connect) says nothing about the
|
|
3385
|
+
// credentials and must stay retryable, so it is checked FIRST
|
|
3386
|
+
// even though its text also contains "Login failed".
|
|
3387
|
+
const transient = /\[LIMIT\]|rate limit|too many|try again|timed? ?out|ECONNRESET|ETIMEDOUT|ENOTFOUND|EAI_AGAIN|socket/i.test(desc);
|
|
3388
|
+
const authFailed = !transient && /authenticat|login failed|AUTHENTICATIONFAILED|invalid credential|password|\[AUTH/i.test(desc);
|
|
3389
|
+
if (authFailed) {
|
|
3390
|
+
this.watchAuthFailed.set(accountId, desc);
|
|
3391
|
+
console.error(` [idle] ${accountId}: credentials refused — suppressing IDLE retries until this account re-authenticates`);
|
|
3392
|
+
}
|
|
3393
|
+
}
|
|
3394
|
+
finally {
|
|
3395
|
+
this.watchStarting.delete(accountId);
|
|
3308
3396
|
}
|
|
3309
3397
|
}
|
|
3310
3398
|
}
|