@bobfrankston/mailx 1.0.241 → 1.0.242

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/mailx",
3
- "version": "1.0.241",
3
+ "version": "1.0.242",
4
4
  "description": "Local-first email client with IMAP sync and standalone native app",
5
5
  "type": "module",
6
6
  "main": "bin/mailx.js",
@@ -24,7 +24,7 @@
24
24
  "@bobfrankston/iflow-node": "^0.1.2",
25
25
  "@bobfrankston/miscinfo": "^1.0.8",
26
26
  "@bobfrankston/oauthsupport": "^1.0.22",
27
- "@bobfrankston/msger": "^0.1.303",
27
+ "@bobfrankston/msger": "^0.1.304",
28
28
  "@capacitor/android": "^8.3.0",
29
29
  "@capacitor/cli": "^8.3.0",
30
30
  "@capacitor/core": "^8.3.0",
@@ -78,7 +78,7 @@
78
78
  "@bobfrankston/iflow-node": "^0.1.2",
79
79
  "@bobfrankston/miscinfo": "^1.0.8",
80
80
  "@bobfrankston/oauthsupport": "^1.0.22",
81
- "@bobfrankston/msger": "^0.1.303",
81
+ "@bobfrankston/msger": "^0.1.304",
82
82
  "@capacitor/android": "^8.3.0",
83
83
  "@capacitor/cli": "^8.3.0",
84
84
  "@capacitor/core": "^8.3.0",
@@ -788,15 +788,21 @@ export class ImapManager extends EventEmitter {
788
788
  }
789
789
  async _syncAll() {
790
790
  const priorityOrder = ["sent", "drafts", "archive", "junk", "trash"];
791
- // Sync all accounts in parallel — each manages its own connection
792
- const syncPromises = [...this.configs.keys()].map(accountId => this.syncAccount(accountId, priorityOrder));
793
- await Promise.allSettled(syncPromises);
794
- // Background body prefetch after sync, fetch bodies for messages that don't have them
795
- if (getPrefetch()) {
796
- for (const accountId of this.configs.keys()) {
791
+ // Sync all accounts in parallel — each manages its own connection.
792
+ // Prefetch runs per-account immediately after that account's sync
793
+ // completes, NOT after all accounts finish. This way a slow account
794
+ // (bobma with 300s timeouts) doesn't block prefetch for a fast account
795
+ // (Gmail). The old code put prefetch after `allSettled`, but syncAll
796
+ // has a 10-minute wall-clock timeout that killed it first — so
797
+ // prefetch never ran.
798
+ const syncAndPrefetch = async (accountId) => {
799
+ await this.syncAccount(accountId, priorityOrder);
800
+ if (getPrefetch()) {
797
801
  this.prefetchBodies(accountId).catch(e => console.error(` [prefetch] ${accountId}: ${e.message}`));
798
802
  }
799
- }
803
+ };
804
+ const syncPromises = [...this.configs.keys()].map(syncAndPrefetch);
805
+ await Promise.allSettled(syncPromises);
800
806
  }
801
807
  /** Sync a single account — manages its own connection lifecycle */
802
808
  async syncAccount(accountId, priorityOrder) {