@bobfrankston/rmfmail 1.2.18 → 1.2.19

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.
@@ -292,11 +292,15 @@ export class MailxService implements MailxApi {
292
292
  // checkpointer avoids checkpoint contention.
293
293
  this._walCheckpointTimer = setInterval(() => {
294
294
  try {
295
- const r = this.store.db.checkpoint("PASSIVE");
296
- // log = frames still in the WAL (~4KB each). If PASSIVE can't keep
297
- // up (a long reader pinning frames) and it's getting large, surface
298
- // it so we can see the reader culprit.
299
- if (r && r.log > 12000) console.warn(` [db] WAL still large after checkpoint: ${r.log} frames (~${Math.round(r.log * 4 / 1024)} MB), checkpointed=${r.checkpointed}`);
295
+ // TRUNCATE (non-blocking checkpoint() drops busy_timeout to 0 for
296
+ // it) both checkpoints frames AND shrinks the WAL file back to 0.
297
+ // PASSIVE kept frames checkpointed but left the file at its grown
298
+ // 26 MB high-water mark; TRUNCATE reclaims it the instant no writer
299
+ // holds the lock, and harmlessly no-ops (busy=1) when one does.
300
+ const r = this.store.db.checkpoint("TRUNCATE");
301
+ // log = frames still in the WAL (~4KB each). A persistently large
302
+ // log means a writer keeps winning the lock every tick — surface it.
303
+ if (r && r.log > 12000) console.warn(` [db] WAL still large after checkpoint: ${r.log} frames (~${Math.round(r.log * 4 / 1024)} MB), busy=${r.busy}`);
300
304
  } catch { /* non-fatal */ }
301
305
  }, 8_000);
302
306
  (this._walCheckpointTimer as any).unref?.();
@@ -283,6 +283,9 @@ export declare class MailxDB {
283
283
  * legacy columns are frozen at first-sight values. */
284
284
  getMessages(query: MessageQuery): PagedResult<MessageEnvelope>;
285
285
  /** Unified inbox: all inbox folders across accounts, sorted by date, paginated in SQL */
286
+ /** Short-TTL cache for the unified-inbox survivor COUNT (the GROUP BY that
287
+ * scans the whole inbox). Keyed by flaggedOnly+folder-set. */
288
+ private _unifiedTotalCache;
286
289
  getUnifiedInbox(page?: number, pageSize?: number, flaggedOnly?: boolean): PagedResult<MessageEnvelope>;
287
290
  /** Map a `messages` row to a MessageEnvelope. Exposes `uuid` (stable local
288
291
  * identity) and `bodyPath` (authoritative on-disk location) in addition
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["db.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAc,MAAM,2BAA2B,CAAC;AAwD9H;yEACyE;AACzE,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAOhE;AAyTD,qBAAa,OAAO;IAChB,OAAO,CAAC,EAAE,CAAe;IAEzB;;mEAE+D;IAC/D,SAAgB,QAAQ,EAAE,OAAO,CAAC;gBAEtB,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO;IA4TtF;gFAC4E;IAC5E,OAAO,CAAC,YAAY;IAqBpB;;;mEAG+D;IAC/D,2BAA2B,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI;IAkB/I;;;;;qEAKiE;IACjE,OAAO,CAAC,0BAA0B;IAkBlC,mEAAmE;IACnE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKhD,8CAA8C;IAC9C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAW7D;;sBAEkB;IAClB,OAAO,CAAC,aAAa;IAqBrB;oEACgE;IAChE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAM1C,yEAAyE;IACzE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAW7F;;;;;;oCAMgC;IAChC,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAkB/C;;0DAEsD;IACtD,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAiChD;;8EAE0E;IAC1E,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAY/E;;yCAEqC;IACrC,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYjF,+DAA+D;IAC/D,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAejF;;mDAE+C;IAC/C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,IAAI;IAW9E;;;;;;;;;;;;;0DAasD;IACtD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAM3D;;;;;;iDAM6C;IAC7C,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM5E;;8DAE0D;IAC1D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAS3D;;2CAEuC;IACvC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAY5C,mBAAmB,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC3E,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAClE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,GAAG,MAAM;IAgCV,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE;IASzE;0EACsE;IACtE,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAKhD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAKvC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;IAOhD,OAAO,CAAC,mBAAmB;IAkB3B;6EACyE;IACzE,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAO/E,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5E,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMtC,UAAU,CAAC,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACvE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QACpE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;KAClC,GAAG,MAAM;IAqBV,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,UAAQ,GAAG,GAAG,EAAE;IAQ5D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;IAKvC,OAAO,CAAC,eAAe;IASvB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU7B,kFAAkF;IAClF,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAWrG,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAiB3D,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAInC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9C,4DAA4D;IAC5D,OAAO,CAAC,kBAAkB;IAa1B;;;;;6EAKyE;IACzE,OAAO,CAAC,eAAe;IAmBvB,yEAAyE;IACzE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IA6BzE,KAAK,IAAI,IAAI;IAMb,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQhF,WAAW,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE;IAI9E,iBAAiB,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE;IAItF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAkBhH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IA6CvC;;mFAE+E;IAC/E,KAAK,CAAC,KAAK,EAAE;QACT,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;QACrE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAuBR,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgCpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IActC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM5D;;;;;6DAKyD;IACzD,OAAO,CAAC,8BAA8B;IA6BtC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMzE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAMpF,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAS/E;;;;;;;6DAOyD;IACzD,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAe9E;;;4EAGwE;IACxE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAO3D;;;;;;;;;;8EAU0E;IAC1E,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;IA2EpG,aAAa,CAAC,GAAG,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,YAAY,CAAC;QACnB,EAAE,EAAE,YAAY,EAAE,CAAC;QACnB,EAAE,EAAE,YAAY,EAAE,CAAC;QACnB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,OAAO,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,MAAM;IAsOV;;;;;;;;;;uCAUmC;IACnC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUpD;;;;;2DAKuD;IACvD,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAAC,eAAe,CAAC;IAkG9D,yFAAyF;IACzF;mEAC+D;IAC/D,OAAO,CAAC,kBAAkB,CAAoD;IAE9E,eAAe,CAAC,IAAI,SAAI,EAAE,QAAQ,SAAK,EAAE,WAAW,UAAQ,GAAG,WAAW,CAAC,eAAe,CAAC;IAiJ3F;;0CAEsC;IACtC,OAAO,CAAC,aAAa;IA0BrB;;;;;uEAKmE;IACnE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe;IAkBnF;;;;qDAIiD;IACjD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAO/C;;;;;;uBAMmB;IACnB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAW7E;;;;;;;yEAOqE;IACrE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAYlG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IA2BjF;;;;;;;;;;;;;sCAakC;IAClC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAqCnG;;;sCAGkC;IAClC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAevI;;;;;8DAK0D;IAC1D,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxF;;;;;;;;6EAQyE;IACzE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAYlI;;;;6EAIyE;IACzE,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE;IAM7G,wEAAwE;IACxE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjF;;;;;6EAKyE;IACzE,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAQrE,mEAAmE;IACnE,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,gBAAgB,GAAE,MAAM,EAAO,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE;IAsB3H;;;;;;+CAM2C;IAC3C,OAAO,CAAC,gBAAgB;IA0BxB;6EACyE;IACzE,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ7E,yEAAyE;IACzE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMjH,sEAAsE;IACtE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAM5E;;;;;;;+CAO2C;IAC3C,wBAAwB,IAAI,MAAM;IAKlC;;;;;yCAKqC;IACrC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAO3D;;gEAE4D;IAC5D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAU3D;wEACoE;IACpE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAO7D;;;oEAGgE;IAChE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAOhE;;;;yDAIqD;IACrD,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAC/E,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAC/D,IAAI,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;KAC7E,EAAE;IASH;;;;8DAI0D;IAC1D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAmB3F;;;;;;;;;;;;;;;gDAe4C;IAC5C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAiC9G,kEAAkE;IAClE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS1C,4DAA4D;IAC5D,gBAAgB,IAAI,IAAI;IACxB,iBAAiB,IAAI,IAAI;IACzB,mBAAmB,IAAI,IAAI;IAE3B;;;;;;2EAMuE;IACvE;;;;;sDAKkD;IAClD,UAAU,CAAC,IAAI,GAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,UAAsB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiBrI,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAyB3B,0CAA0C;IAC1C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAyBpD;iFAC6E;IAC7E,OAAO,CAAC,SAAS,CAA0B;IAC3C,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAGhD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAI3C;;2CAEuC;IACvC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5D,gBAAgB,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAM5D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQvC;;;;yCAIqC;IACrC,OAAO,CAAC,kBAAkB,CAAC,CAAa;IACxC,oBAAoB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAG1C,OAAO,CAAC,qBAAqB;IAI7B;;;;;kCAK8B;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAoJ;IAC5K,iBAAiB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAI9K;;;;;;;;;6EASyE;IACzE;;;;;;;;wDAQoD;IAC9C,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAuIjD;;;;;;;;;sEASkE;IAC5D,mBAAmB,CAAC,GAAG,EAAE;QAC3B,SAAS,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,EAAE,CAAC;QACzH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACzF,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAkI3F;;;;qEAIiE;IACjE,oBAAoB,IAAI;QACpB,SAAS,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpF,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACrF;IA6BD;;;;;;;;;;;0EAWsE;IACtE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE;IAwGjI,+EAA+E;IAC/E,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,QAAQ,SAAM,GAAG;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAyB/N,sEAAsE;IACtE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBhD,mDAAmD;IACnD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC;;;;2EAIuE;IACvE,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQjD,sFAAsF;IACtF,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,QAAQ,SAAK,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,UAAQ,GAAG,WAAW,CAAC,eAAe,CAAC;IAmOrJ,+CAA+C;IAC/C,kBAAkB,IAAI,MAAM;IAuC5B,kDAAkD;IAClD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QACtF,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,IAAI;IAeR,kDAAkD;IAClD,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG;QACtC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAC1D,cAAc,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAC5D,QAAQ,EAAE,MAAM,CAAC;KACpB,EAAE;IAgBH,qCAAqC;IACrC,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIpC,mCAAmC;IACnC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM/C,gDAAgD;IAChD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAO9C,2DAA2D;IAC3D,wBAAwB,IAAI,MAAM;CAIrC"}
@@ -1869,6 +1869,9 @@ export class MailxDB {
1869
1869
  return { items, total, page, pageSize };
1870
1870
  }
1871
1871
  /** Unified inbox: all inbox folders across accounts, sorted by date, paginated in SQL */
1872
+ /** Short-TTL cache for the unified-inbox survivor COUNT (the GROUP BY that
1873
+ * scans the whole inbox). Keyed by flaggedOnly+folder-set. */
1874
+ _unifiedTotalCache = new Map();
1872
1875
  getUnifiedInbox(page = 1, pageSize = 50, flaggedOnly = false) {
1873
1876
  const offset = (page - 1) * pageSize;
1874
1877
  // Find all inbox folder IDs
@@ -1900,43 +1903,72 @@ export class MailxDB {
1900
1903
  // copies the user expects to see in All Inboxes — collapsing across
1901
1904
  // accounts hid the second one (Bob 2026-06-12). Within a single inbox,
1902
1905
  // the to-self N-copies case still collapses as before.
1903
- const total = this.db.prepare(`SELECT COUNT(*) as cnt FROM (
1904
- SELECT 1
1905
- FROM messages m
1906
- JOIN message_folders mf ON mf.message_row_id = m.id
1907
- WHERE mf.folder_id IN (${placeholders})${flagFilter}
1908
- GROUP BY m.account_id, CASE WHEN COALESCE(m.message_id, '') = '' THEN 'mid-empty:' || m.id ELSE m.message_id END
1909
- )`).get(...folderIds).cnt;
1910
- const rows = this.db.prepare(`WITH ranked AS (
1911
- SELECT m.id AS m_id, mf.uid AS mf_uid, mf.folder_id AS mf_folder_id,
1912
- ROW_NUMBER() OVER (
1913
- PARTITION BY m.account_id, CASE WHEN COALESCE(m.message_id, '') = '' THEN 'mid-empty:' || m.id ELSE m.message_id END
1914
- ORDER BY m.date DESC, m.id DESC
1915
- ) AS rn
1916
- FROM messages m
1917
- JOIN message_folders mf ON mf.message_row_id = m.id
1918
- WHERE mf.folder_id IN (${placeholders})${flagFilter}
1919
- )
1920
- SELECT m.*, r.mf_uid AS uid, r.mf_folder_id AS folder_id,
1921
- EXISTS(
1922
- SELECT 1 FROM sync_actions sa
1923
- WHERE sa.account_id = m.account_id AND sa.uid = r.mf_uid
1924
- ) AS pending,
1925
- (SELECT COUNT(DISTINCT account_id) FROM messages m2
1926
- WHERE m2.message_id = m.message_id AND COALESCE(m.message_id, '') != '') AS dupeCount,
1927
- -- Replied state aggregated across the whole Message-ID group, not
1928
- -- just the dedup survivor. When duplicates collapse (same message
1929
- -- delivered to multiple self-addresses), the \Answered flag /
1930
- -- is_replied can live on a NON-surviving copy so the survivor
1931
- -- showed no reply arrow even though TB did. OR it across the group
1932
- -- so the marker is correct regardless of which row wins dedup
1933
- -- (Bob 2026-06-01). Empty message_id falls back to the row's own.
1934
- COALESCE((SELECT MAX(CASE WHEN m3.is_replied = 1 OR m3.flags_json LIKE '%Answered%' THEN 1 ELSE 0 END)
1935
- FROM messages m3 WHERE m3.message_id = m.message_id AND COALESCE(m.message_id, '') != ''), m.is_replied) AS groupReplied
1936
- FROM ranked r
1937
- JOIN messages m ON m.id = r.m_id
1938
- WHERE r.rn = 1
1939
- ORDER BY m.date DESC LIMIT ? OFFSET ?`).all(...folderIds, pageSize, offset);
1906
+ // total = number of deduped survivors. The GROUP BY scans every inbox
1907
+ // row (~230ms on a 90k inbox) so cache it briefly — it only changes on
1908
+ // sync/delete, and a few seconds of staleness affects only the page-count
1909
+ // indicator, never the (always-live) row data (Bob 2026-06-16).
1910
+ const totalKey = `${flaggedOnly}:${folderIds.join(",")}`;
1911
+ const cachedTotal = this._unifiedTotalCache.get(totalKey);
1912
+ let total;
1913
+ if (cachedTotal && (Date.now() - cachedTotal.at) < 4000) {
1914
+ total = cachedTotal.total;
1915
+ }
1916
+ else {
1917
+ total = this.db.prepare(`SELECT COUNT(*) as cnt FROM (
1918
+ SELECT 1
1919
+ FROM messages m
1920
+ JOIN message_folders mf ON mf.message_row_id = m.id
1921
+ WHERE mf.folder_id IN (${placeholders})${flagFilter}
1922
+ GROUP BY m.account_id, CASE WHEN COALESCE(m.message_id, '') = '' THEN 'mid-empty:' || m.id ELSE m.message_id END
1923
+ )`).get(...folderIds).cnt;
1924
+ this._unifiedTotalCache.set(totalKey, { total, at: Date.now() });
1925
+ }
1926
+ // STREAMING DEDUP. The old query ran ROW_NUMBER() OVER (PARTITION BY
1927
+ // message_id ORDER BY date) across EVERY inbox row, then took rn=1 — a
1928
+ // full sort of ~90k rows for a 50-row page (~780ms, Bob 2026-06-16
1929
+ // "getUnifiedInbox 4s/2s"). But page 1 only needs the 50 newest deduped
1930
+ // survivors: walk rows in date-DESC order, keep the first row seen per
1931
+ // (account_id, message_id) group (= the rn=1 survivor identical rule),
1932
+ // and STOP once the page is filled. Typical page-1 read: ~50-100 physical
1933
+ // rows instead of 90k sorted. .iterate() lets us break early; the index
1934
+ // idx_messages_folder_date supplies the date order. Deep pages walk more
1935
+ // (bounded by offset+pageSize survivors) but remain far cheaper than a
1936
+ // full window sort, and are rare in the unified inbox.
1937
+ const baseStmt = this.db.prepare(`SELECT m.*, mf.uid AS uid, mf.folder_id AS folder_id
1938
+ FROM messages m
1939
+ JOIN message_folders mf ON mf.message_row_id = m.id
1940
+ WHERE mf.folder_id IN (${placeholders})${flagFilter}
1941
+ ORDER BY m.date DESC, m.id DESC`);
1942
+ // Per-survivor enrichment (runs only for the ≤pageSize kept rows, not the
1943
+ // whole inbox). Same semantics as the old inline correlated subqueries.
1944
+ const pendingStmt = this.db.prepare("SELECT 1 FROM sync_actions WHERE account_id = ? AND uid = ? LIMIT 1");
1945
+ const dupeStmt = this.db.prepare("SELECT COUNT(DISTINCT account_id) AS c FROM messages WHERE message_id = ?");
1946
+ const groupRepliedStmt = this.db.prepare("SELECT MAX(CASE WHEN is_replied = 1 OR flags_json LIKE '%Answered%' THEN 1 ELSE 0 END) AS r FROM messages WHERE message_id = ?");
1947
+ const seen = new Set();
1948
+ const kept = [];
1949
+ let survivorIdx = 0;
1950
+ const lastWanted = offset + pageSize;
1951
+ for (const r of baseStmt.iterate(...folderIds)) {
1952
+ const key = (r.message_id && r.message_id !== "")
1953
+ ? `${r.account_id}${r.message_id}`
1954
+ : `${r.account_id}mid-empty:${r.id}`;
1955
+ if (seen.has(key))
1956
+ continue; // a newer copy of this group already won
1957
+ seen.add(key);
1958
+ if (survivorIdx >= offset && survivorIdx < lastWanted)
1959
+ kept.push(r);
1960
+ survivorIdx++;
1961
+ if (survivorIdx >= lastWanted)
1962
+ break; // page filled — stop walking
1963
+ }
1964
+ const rows = kept.map(r => {
1965
+ const hasMid = !!(r.message_id && r.message_id !== "");
1966
+ r.pending = pendingStmt.get(r.account_id, r.uid) ? 1 : 0;
1967
+ r.dupeCount = hasMid ? (dupeStmt.get(r.message_id)?.c | 0) : 0;
1968
+ const gr = hasMid ? groupRepliedStmt.get(r.message_id)?.r : null;
1969
+ r.groupReplied = (gr == null) ? r.is_replied : gr;
1970
+ return r;
1971
+ });
1940
1972
  const items = rows.map(r => ({
1941
1973
  id: r.id,
1942
1974
  accountId: r.account_id,
@@ -2431,12 +2463,31 @@ export class MailxDB {
2431
2463
  * Returns {busy, log, checkpointed} (log = frames in WAL, checkpointed =
2432
2464
  * frames moved into the db) or null on error. */
2433
2465
  checkpoint(mode = "PASSIVE") {
2466
+ // TRUNCATE/RESTART need the WAL write lock and otherwise WAIT up to
2467
+ // busy_timeout (5s on main) if a sync write is in flight — blocking the
2468
+ // main thread, the exact stall we are trying to avoid. Drop busy_timeout
2469
+ // to 0 around those modes so the checkpoint returns busy=1 INSTANTLY
2470
+ // instead of waiting; the next 8s tick retries. PASSIVE never waits, so
2471
+ // it keeps the default timeout. (PASSIVE keeps frames checkpointed but
2472
+ // never shrinks the WAL FILE; TRUNCATE is what reclaims the 26 MB the
2473
+ // file grows to during a heavy sync — Bob 2026-06-16.)
2474
+ const needsLock = mode === "TRUNCATE" || mode === "RESTART";
2434
2475
  try {
2476
+ if (needsLock)
2477
+ this.db.exec("PRAGMA busy_timeout=0");
2435
2478
  return this.db.prepare(`PRAGMA wal_checkpoint(${mode})`).get();
2436
2479
  }
2437
2480
  catch {
2438
2481
  return null;
2439
2482
  }
2483
+ finally {
2484
+ if (needsLock) {
2485
+ try {
2486
+ this.db.exec("PRAGMA busy_timeout=5000");
2487
+ }
2488
+ catch { /* ignore */ }
2489
+ }
2490
+ }
2440
2491
  }
2441
2492
  runInTxn(fn) {
2442
2493
  if (this.db.isTransaction)