@bobfrankston/rmfmail 1.2.177 → 1.2.178

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.
Files changed (56) hide show
  1. package/client/android-bootstrap.bundle.js +112 -0
  2. package/client/android-bootstrap.bundle.js.map +3 -3
  3. package/client/app.bundle.js +71 -7
  4. package/client/app.bundle.js.map +3 -3
  5. package/client/components/alarms.js +88 -11
  6. package/client/components/alarms.js.map +1 -1
  7. package/client/components/alarms.ts +83 -13
  8. package/client/compose/compose.bundle.js +4 -0
  9. package/client/compose/compose.bundle.js.map +2 -2
  10. package/client/lib/api-client.js +6 -0
  11. package/client/lib/api-client.js.map +1 -1
  12. package/client/lib/api-client.ts +9 -0
  13. package/client/lib/mailxapi.js +27 -5
  14. package/package.json +5 -5
  15. package/packages/mailx-imap/package-lock.json +2 -2
  16. package/packages/mailx-imap/package.json +1 -1
  17. package/packages/mailx-service/index.d.ts +5 -0
  18. package/packages/mailx-service/index.d.ts.map +1 -1
  19. package/packages/mailx-service/index.js +22 -1
  20. package/packages/mailx-service/index.js.map +1 -1
  21. package/packages/mailx-service/index.ts +25 -1
  22. package/packages/mailx-service/jsonrpc.js +4 -0
  23. package/packages/mailx-service/jsonrpc.js.map +1 -1
  24. package/packages/mailx-service/jsonrpc.ts +4 -0
  25. package/packages/mailx-service/package.json +1 -1
  26. package/packages/mailx-settings/index.d.ts +8 -1
  27. package/packages/mailx-settings/index.d.ts.map +1 -1
  28. package/packages/mailx-settings/index.js +71 -0
  29. package/packages/mailx-settings/index.js.map +1 -1
  30. package/packages/mailx-settings/index.ts +61 -1
  31. package/packages/mailx-settings/package.json +1 -1
  32. package/packages/mailx-store/package.json +1 -1
  33. package/packages/mailx-store-web/android-bootstrap.js +4 -0
  34. package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
  35. package/packages/mailx-store-web/android-bootstrap.ts +4 -0
  36. package/packages/mailx-store-web/package.json +1 -1
  37. package/packages/mailx-store-web/web-service.d.ts +4 -0
  38. package/packages/mailx-store-web/web-service.d.ts.map +1 -1
  39. package/packages/mailx-store-web/web-service.js +48 -2
  40. package/packages/mailx-store-web/web-service.js.map +1 -1
  41. package/packages/mailx-store-web/web-service.ts +41 -2
  42. package/packages/mailx-types/index.d.ts +2 -0
  43. package/packages/mailx-types/index.d.ts.map +1 -1
  44. package/packages/mailx-types/index.js +3 -0
  45. package/packages/mailx-types/index.js.map +1 -1
  46. package/packages/mailx-types/index.ts +7 -0
  47. package/packages/mailx-types/mailx-api.d.ts +14 -0
  48. package/packages/mailx-types/mailx-api.d.ts.map +1 -1
  49. package/packages/mailx-types/mailx-api.ts +5 -0
  50. package/packages/mailx-types/package.json +1 -1
  51. package/packages/mailx-types/reminder-state.d.ts +42 -0
  52. package/packages/mailx-types/reminder-state.d.ts.map +1 -0
  53. package/packages/mailx-types/reminder-state.js +85 -0
  54. package/packages/mailx-types/reminder-state.js.map +1 -0
  55. package/packages/mailx-types/reminder-state.ts +88 -0
  56. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-69680 → node_modules.npmglobalize-stash-7544}/.package-lock.json +0 -0
@@ -6,7 +6,10 @@
6
6
  * - Popup shows item title, scheduled time, Snooze (5 / 15 / 30 min / 1 hr /
7
7
  * custom), Dismiss. Snooze delays the alarm by the chosen interval; Dismiss
8
8
  * suppresses it permanently.
9
- * - Dismissed / snoozed state lives in localStorage (per-device). Google
9
+ * - Dismissed / snoozed state lives in localStorage for instant local
10
+ * decisions, and syncs across devices via reminders.jsonc on the shared
11
+ * Drive folder (mergeReminderState — push + pull in one round-trip, so
12
+ * dismissing on one machine suppresses the popup on the others). Google
10
13
  * Calendar's own reminders aren't mutated by this — mailx's popup is a
11
14
  * local convenience, not a reminder-authority replacement.
12
15
  * - Default lead time: 10 min before calendar event start; at task due time
@@ -17,7 +20,7 @@
17
20
  * hidden — alarm won't fire until user returns, which matches Thunderbird's
18
21
  * behavior (focus-gated). OS-level notifications are a separate follow-up.
19
22
  */
20
- import { getCalendarEvents, getTasks, showReminderPopup, deleteCalendarEvent, logClientEvent, getReminderSound } from "../lib/api-client.js";
23
+ import { getCalendarEvents, getTasks, showReminderPopup, deleteCalendarEvent, logClientEvent, getReminderSound, mergeReminderState } from "../lib/api-client.js";
21
24
  /** Alarm diagnostics. A plain console.log from the WebView never reaches
22
25
  * the daemon log file, so snooze/dismiss/fire decisions were invisible
23
26
  * after the fact — "is snooze working?" couldn't be answered from the
@@ -29,8 +32,8 @@ function alog(tag, data) {
29
32
  }
30
33
  catch { /* never break the alarm path */ }
31
34
  }
32
- const DISMISSED_KEY = "mailx-alarm-dismissed"; // { uuid: true }
33
- const SNOOZED_KEY = "mailx-alarm-snoozed"; // { uuid: epoch-ms-end }
35
+ const DISMISSED_KEY = "mailx-alarm-dismissed"; // { occKey: dismissedAt-epoch-ms } (legacy entries: true)
36
+ const SNOOZED_KEY = "mailx-alarm-snoozed"; // { occKey: epoch-ms-end }
34
37
  const LOOKBACK_MS = 60 * 60 * 1000; // fire past-due alarms from the last 60 min
35
38
  const LOOKAHEAD_MS = 2 * 60 * 60 * 1000; // poll window: upcoming 2 hr
36
39
  const POLL_INTERVAL_MS = 30_000;
@@ -105,6 +108,10 @@ function playChime() {
105
108
  }
106
109
  catch { /* */ } }, 1300);
107
110
  }
111
+ // Dismissed values are the dismissal's epoch-ms (drives 30-day pruning and
112
+ // cross-device max-merge). Pre-sync entries are boolean `true` — truthy, so
113
+ // every `if (dismissed[key])` guard works on both; the sync round-trip
114
+ // upgrades them to timestamps.
108
115
  function loadDismissed() {
109
116
  try {
110
117
  return JSON.parse(localStorage.getItem(DISMISSED_KEY) || "{}");
@@ -147,7 +154,63 @@ function pruneState(now) {
147
154
  }
148
155
  if (changed)
149
156
  saveSnoozed(snoozed);
150
- // Dismissed is sparse don't bother pruning aggressively.
157
+ // Dismissed entries carry their dismissal timestamp drop 30-day-old
158
+ // ones (the occurrence is far outside every device's lookback window).
159
+ // Legacy boolean entries are kept; the sync round-trip stamps them.
160
+ const dismissed = loadDismissed();
161
+ let dChanged = false;
162
+ for (const [uuid, at] of Object.entries(dismissed)) {
163
+ if (typeof at === "number" && at < now - 30 * 86400_000) {
164
+ delete dismissed[uuid];
165
+ dChanged = true;
166
+ }
167
+ }
168
+ if (dChanged)
169
+ saveDismissed(dismissed);
170
+ }
171
+ // ── Cross-device state sync ─────────────────────────────────────────────────
172
+ // One round-trip: send the local maps, the service merges them with the
173
+ // shared reminders.jsonc (per-key max, union) and returns the result, which
174
+ // we merge back into localStorage. Local decisions never wait on this —
175
+ // pollAlarms syncs only when it actually has due alarms (so another device's
176
+ // dismissal can suppress the popup), and after every user action (so this
177
+ // device's decision propagates). Throttled to keep Drive traffic sane.
178
+ let _lastStateSync = 0;
179
+ const STATE_SYNC_MIN_MS = 60_000;
180
+ async function syncReminderState(force = false) {
181
+ const now = Date.now();
182
+ if (!force && now - _lastStateSync < STATE_SYNC_MIN_MS)
183
+ return false;
184
+ _lastStateSync = now;
185
+ try {
186
+ const merged = await mergeReminderState({
187
+ dismissed: loadDismissed(), // `true` legacy values are normalized service-side
188
+ snoozed: loadSnoozed(),
189
+ });
190
+ if (!merged)
191
+ return false; // service predates the API (Android/web) — stay per-device
192
+ // Merge INTO the current maps rather than overwriting — the user may
193
+ // have dismissed/snoozed something while the round-trip was in
194
+ // flight, and that newer local entry must survive.
195
+ const dm = loadDismissed();
196
+ for (const [k, v] of Object.entries(merged.dismissed)) {
197
+ const cur = dm[k];
198
+ if (cur === undefined || cur === true || v > cur)
199
+ dm[k] = v;
200
+ }
201
+ saveDismissed(dm);
202
+ const sn = loadSnoozed();
203
+ for (const [k, v] of Object.entries(merged.snoozed)) {
204
+ if (!sn[k] || v > sn[k])
205
+ sn[k] = v;
206
+ }
207
+ saveSnoozed(sn);
208
+ return true;
209
+ }
210
+ catch (e) {
211
+ alog("state sync failed", { err: e?.message || String(e) });
212
+ return false;
213
+ }
151
214
  }
152
215
  /** Per-occurrence key for dismissed/snoozed/fired tracking. Recurring
153
216
  * events all share `ev.uuid`, so dismissing one occurrence used to
@@ -237,7 +300,7 @@ async function collectDueAlarms(now) {
237
300
  continue;
238
301
  const k = `${occBaseKey}@${offsetMs}`;
239
302
  if (!dismissed[k]) {
240
- dismissed[k] = true;
303
+ dismissed[k] = Date.now();
241
304
  touched = true;
242
305
  }
243
306
  }
@@ -585,7 +648,7 @@ async function firePopupForItem(item) {
585
648
  // didn't want this. Same treatment.
586
649
  {
587
650
  const m = loadDismissed();
588
- m[item.uuid] = true;
651
+ m[item.uuid] = Date.now();
589
652
  saveDismissed(m);
590
653
  alog("dismiss saved", { key: item.uuid, via: r.button });
591
654
  }
@@ -597,7 +660,7 @@ async function firePopupForItem(item) {
597
660
  // delete propagates.
598
661
  {
599
662
  const m = loadDismissed();
600
- m[item.uuid] = true;
663
+ m[item.uuid] = Date.now();
601
664
  saveDismissed(m);
602
665
  }
603
666
  firedThisSession.delete(item.uuid);
@@ -612,7 +675,7 @@ async function firePopupForItem(item) {
612
675
  alog("unknown popup result", { button: r.button, form: r.form });
613
676
  {
614
677
  const m = loadDismissed();
615
- m[item.uuid] = true;
678
+ m[item.uuid] = Date.now();
616
679
  saveDismissed(m);
617
680
  }
618
681
  break;
@@ -622,11 +685,15 @@ async function firePopupForItem(item) {
622
685
  alog("action handler threw — forcing Dismiss", { key: item.uuid, err: e?.message || String(e) });
623
686
  try {
624
687
  const m = loadDismissed();
625
- m[item.uuid] = true;
688
+ m[item.uuid] = Date.now();
626
689
  saveDismissed(m);
627
690
  }
628
691
  catch { /* */ }
629
692
  }
693
+ // Push this device's decision to the shared state so the other machines'
694
+ // pollers see it before they fire their own popup. Fire-and-forget —
695
+ // the local maps above are already committed.
696
+ void syncReminderState(true);
630
697
  }
631
698
  function snoozeItem(item, minutes) {
632
699
  const now = Date.now();
@@ -644,7 +711,14 @@ async function pollAlarms() {
644
711
  return; // don't tick while tab hidden
645
712
  const now = Date.now();
646
713
  pruneState(now);
647
- const due = await collectDueAlarms(now);
714
+ let due = await collectDueAlarms(now);
715
+ // Something is due — before popping, pull the shared state (throttled)
716
+ // in case another device already dismissed or snoozed it. A couple of
717
+ // seconds' delay on a reminder popup is invisible; a popup for a
718
+ // reminder the user already dismissed on their other machine is not.
719
+ if (due.length > 0 && await syncReminderState()) {
720
+ due = await collectDueAlarms(now);
721
+ }
648
722
  // Two filters: skip uuids already fired this session (Snooze + an
649
723
  // expired snooze re-allows them; Dismiss permanently suppresses via
650
724
  // localStorage), and skip uuids whose popup is currently visible
@@ -667,6 +741,9 @@ export function startAlarmPoller() {
667
741
  if (window.__mailxAlarmPollerRunning)
668
742
  return;
669
743
  window.__mailxAlarmPollerRunning = true;
744
+ // Boot-time state pull — adopts dismissals/snoozes made on other
745
+ // devices (and stamps legacy boolean entries) before the first poll.
746
+ void syncReminderState(true);
670
747
  // First check after 5 s so startup isn't jittered by a modal.
671
748
  setTimeout(() => { pollAlarms().catch(() => { }); }, 5000);
672
749
  setInterval(() => { pollAlarms().catch(() => { }); }, POLL_INTERVAL_MS);
@@ -1 +1 @@
1
- {"version":3,"file":"alarms.js","sourceRoot":"","sources":["alarms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alarms.js","sourceRoot":"","sources":["alarms.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,10 @@
6
6
  * - Popup shows item title, scheduled time, Snooze (5 / 15 / 30 min / 1 hr /
7
7
  * custom), Dismiss. Snooze delays the alarm by the chosen interval; Dismiss
8
8
  * suppresses it permanently.
9
- * - Dismissed / snoozed state lives in localStorage (per-device). Google
9
+ * - Dismissed / snoozed state lives in localStorage for instant local
10
+ * decisions, and syncs across devices via reminders.jsonc on the shared
11
+ * Drive folder (mergeReminderState — push + pull in one round-trip, so
12
+ * dismissing on one machine suppresses the popup on the others). Google
10
13
  * Calendar's own reminders aren't mutated by this — mailx's popup is a
11
14
  * local convenience, not a reminder-authority replacement.
12
15
  * - Default lead time: 10 min before calendar event start; at task due time
@@ -18,7 +21,7 @@
18
21
  * behavior (focus-gated). OS-level notifications are a separate follow-up.
19
22
  */
20
23
 
21
- import { getCalendarEvents, getTasks, showReminderPopup, deleteCalendarEvent, logClientEvent, getReminderSound } from "../lib/api-client.js";
24
+ import { getCalendarEvents, getTasks, showReminderPopup, deleteCalendarEvent, logClientEvent, getReminderSound, mergeReminderState } from "../lib/api-client.js";
22
25
 
23
26
  /** Alarm diagnostics. A plain console.log from the WebView never reaches
24
27
  * the daemon log file, so snooze/dismiss/fire decisions were invisible
@@ -29,8 +32,8 @@ function alog(tag: string, data?: any): void {
29
32
  try { logClientEvent(`[alarm] ${tag}`, data); } catch { /* never break the alarm path */ }
30
33
  }
31
34
 
32
- const DISMISSED_KEY = "mailx-alarm-dismissed"; // { uuid: true }
33
- const SNOOZED_KEY = "mailx-alarm-snoozed"; // { uuid: epoch-ms-end }
35
+ const DISMISSED_KEY = "mailx-alarm-dismissed"; // { occKey: dismissedAt-epoch-ms } (legacy entries: true)
36
+ const SNOOZED_KEY = "mailx-alarm-snoozed"; // { occKey: epoch-ms-end }
34
37
  const LOOKBACK_MS = 60 * 60 * 1000; // fire past-due alarms from the last 60 min
35
38
  const LOOKAHEAD_MS = 2 * 60 * 60 * 1000; // poll window: upcoming 2 hr
36
39
  const POLL_INTERVAL_MS = 30_000;
@@ -105,10 +108,14 @@ interface AlarmItem {
105
108
  htmlLink?: string;
106
109
  }
107
110
 
108
- function loadDismissed(): Record<string, boolean> {
111
+ // Dismissed values are the dismissal's epoch-ms (drives 30-day pruning and
112
+ // cross-device max-merge). Pre-sync entries are boolean `true` — truthy, so
113
+ // every `if (dismissed[key])` guard works on both; the sync round-trip
114
+ // upgrades them to timestamps.
115
+ function loadDismissed(): Record<string, number | true> {
109
116
  try { return JSON.parse(localStorage.getItem(DISMISSED_KEY) || "{}"); } catch { return {}; }
110
117
  }
111
- function saveDismissed(map: Record<string, boolean>): void {
118
+ function saveDismissed(map: Record<string, number | true>): void {
112
119
  try { localStorage.setItem(DISMISSED_KEY, JSON.stringify(map)); } catch { /* private mode */ }
113
120
  }
114
121
  function loadSnoozed(): Record<string, number> {
@@ -128,7 +135,56 @@ function pruneState(now: number): void {
128
135
  if (until < now - 7 * 86400_000) { delete snoozed[uuid]; changed = true; }
129
136
  }
130
137
  if (changed) saveSnoozed(snoozed);
131
- // Dismissed is sparse don't bother pruning aggressively.
138
+ // Dismissed entries carry their dismissal timestamp drop 30-day-old
139
+ // ones (the occurrence is far outside every device's lookback window).
140
+ // Legacy boolean entries are kept; the sync round-trip stamps them.
141
+ const dismissed = loadDismissed();
142
+ let dChanged = false;
143
+ for (const [uuid, at] of Object.entries(dismissed)) {
144
+ if (typeof at === "number" && at < now - 30 * 86400_000) { delete dismissed[uuid]; dChanged = true; }
145
+ }
146
+ if (dChanged) saveDismissed(dismissed);
147
+ }
148
+
149
+ // ── Cross-device state sync ─────────────────────────────────────────────────
150
+ // One round-trip: send the local maps, the service merges them with the
151
+ // shared reminders.jsonc (per-key max, union) and returns the result, which
152
+ // we merge back into localStorage. Local decisions never wait on this —
153
+ // pollAlarms syncs only when it actually has due alarms (so another device's
154
+ // dismissal can suppress the popup), and after every user action (so this
155
+ // device's decision propagates). Throttled to keep Drive traffic sane.
156
+ let _lastStateSync = 0;
157
+ const STATE_SYNC_MIN_MS = 60_000;
158
+
159
+ async function syncReminderState(force = false): Promise<boolean> {
160
+ const now = Date.now();
161
+ if (!force && now - _lastStateSync < STATE_SYNC_MIN_MS) return false;
162
+ _lastStateSync = now;
163
+ try {
164
+ const merged = await mergeReminderState({
165
+ dismissed: loadDismissed() as Record<string, number>, // `true` legacy values are normalized service-side
166
+ snoozed: loadSnoozed(),
167
+ });
168
+ if (!merged) return false; // service predates the API (Android/web) — stay per-device
169
+ // Merge INTO the current maps rather than overwriting — the user may
170
+ // have dismissed/snoozed something while the round-trip was in
171
+ // flight, and that newer local entry must survive.
172
+ const dm = loadDismissed();
173
+ for (const [k, v] of Object.entries(merged.dismissed)) {
174
+ const cur = dm[k];
175
+ if (cur === undefined || cur === true || v > cur) dm[k] = v;
176
+ }
177
+ saveDismissed(dm);
178
+ const sn = loadSnoozed();
179
+ for (const [k, v] of Object.entries(merged.snoozed)) {
180
+ if (!sn[k] || v > sn[k]) sn[k] = v;
181
+ }
182
+ saveSnoozed(sn);
183
+ return true;
184
+ } catch (e: any) {
185
+ alog("state sync failed", { err: e?.message || String(e) });
186
+ return false;
187
+ }
132
188
  }
133
189
 
134
190
  /** Per-occurrence key for dismissed/snoozed/fired tracking. Recurring
@@ -215,7 +271,7 @@ async function collectDueAlarms(now: number): Promise<AlarmItem[]> {
215
271
  for (const offsetMs of eligibleOffsets) {
216
272
  if (offsetMs === pick.offsetMs) continue;
217
273
  const k = `${occBaseKey}@${offsetMs}`;
218
- if (!dismissed[k]) { dismissed[k] = true; touched = true; }
274
+ if (!dismissed[k]) { dismissed[k] = Date.now(); touched = true; }
219
275
  }
220
276
  if (touched) saveDismissed(dismissed);
221
277
  }
@@ -549,7 +605,7 @@ async function firePopupForItem(item: AlarmItem): Promise<void> {
549
605
  case "closed": // user closed via X / Esc with no labeled button —
550
606
  // popup HAS Dismiss right there; the user clearly
551
607
  // didn't want this. Same treatment.
552
- { const m = loadDismissed(); m[item.uuid] = true; saveDismissed(m);
608
+ { const m = loadDismissed(); m[item.uuid] = Date.now(); saveDismissed(m);
553
609
  alog("dismiss saved", { key: item.uuid, via: r.button }); }
554
610
  break;
555
611
  case "Delete":
@@ -557,7 +613,7 @@ async function firePopupForItem(item: AlarmItem): Promise<void> {
557
613
  // mark inside the service; reconcile picks it up. Also dismiss
558
614
  // the alarm so it can't re-fire on a stale local row before the
559
615
  // delete propagates.
560
- { const m = loadDismissed(); m[item.uuid] = true; saveDismissed(m); }
616
+ { const m = loadDismissed(); m[item.uuid] = Date.now(); saveDismissed(m); }
561
617
  firedThisSession.delete(item.uuid);
562
618
  deleteCalendarEvent(item.uuid).catch((e: any) =>
563
619
  console.error(` [alarm] delete failed for ${item.uuid}: ${e?.message || e}`));
@@ -569,13 +625,17 @@ async function firePopupForItem(item: AlarmItem): Promise<void> {
569
625
  // the user picked something we can't decode, don't keep
570
626
  // pestering them every 30 s).
571
627
  alog("unknown popup result", { button: r.button, form: (r as any).form });
572
- { const m = loadDismissed(); m[item.uuid] = true; saveDismissed(m); }
628
+ { const m = loadDismissed(); m[item.uuid] = Date.now(); saveDismissed(m); }
573
629
  break;
574
630
  }
575
631
  } catch (e: any) {
576
632
  alog("action handler threw — forcing Dismiss", { key: item.uuid, err: e?.message || String(e) });
577
- try { const m = loadDismissed(); m[item.uuid] = true; saveDismissed(m); } catch { /* */ }
633
+ try { const m = loadDismissed(); m[item.uuid] = Date.now(); saveDismissed(m); } catch { /* */ }
578
634
  }
635
+ // Push this device's decision to the shared state so the other machines'
636
+ // pollers see it before they fire their own popup. Fire-and-forget —
637
+ // the local maps above are already committed.
638
+ void syncReminderState(true);
579
639
  }
580
640
 
581
641
  function snoozeItem(item: AlarmItem, minutes: number): void {
@@ -594,7 +654,14 @@ async function pollAlarms(): Promise<void> {
594
654
  if (document.hidden) return; // don't tick while tab hidden
595
655
  const now = Date.now();
596
656
  pruneState(now);
597
- const due = await collectDueAlarms(now);
657
+ let due = await collectDueAlarms(now);
658
+ // Something is due — before popping, pull the shared state (throttled)
659
+ // in case another device already dismissed or snoozed it. A couple of
660
+ // seconds' delay on a reminder popup is invisible; a popup for a
661
+ // reminder the user already dismissed on their other machine is not.
662
+ if (due.length > 0 && await syncReminderState()) {
663
+ due = await collectDueAlarms(now);
664
+ }
598
665
  // Two filters: skip uuids already fired this session (Snooze + an
599
666
  // expired snooze re-allows them; Dismiss permanently suppresses via
600
667
  // localStorage), and skip uuids whose popup is currently visible
@@ -616,6 +683,9 @@ async function pollAlarms(): Promise<void> {
616
683
  export function startAlarmPoller(): void {
617
684
  if ((window as any).__mailxAlarmPollerRunning) return;
618
685
  (window as any).__mailxAlarmPollerRunning = true;
686
+ // Boot-time state pull — adopts dismissals/snoozes made on other
687
+ // devices (and stamps legacy boolean entries) before the first poll.
688
+ void syncReminderState(true);
619
689
  // First check after 5 s so startup isn't jittered by a modal.
620
690
  setTimeout(() => { pollAlarms().catch(() => { /* */ }); }, 5000);
621
691
  setInterval(() => { pollAlarms().catch(() => { /* */ }); }, POLL_INTERVAL_MS);
@@ -1080,6 +1080,7 @@ __export(api_client_exports, {
1080
1080
  logClientEvent: () => logClientEvent,
1081
1081
  markAsSpamMessages: () => markAsSpamMessages,
1082
1082
  markFolderRead: () => markFolderRead,
1083
+ mergeReminderState: () => mergeReminderState,
1083
1084
  moveFolderToTrash: () => moveFolderToTrash,
1084
1085
  moveMessage: () => moveMessage,
1085
1086
  moveMessages: () => moveMessages,
@@ -1613,6 +1614,9 @@ function closeWordEdit(editId) {
1613
1614
  function showReminderPopup(opts) {
1614
1615
  return ipc().showReminderPopup?.(opts) ?? Promise.resolve({ button: "", reason: "no host" });
1615
1616
  }
1617
+ function mergeReminderState(patch) {
1618
+ return ipc().mergeReminderState?.(patch) ?? Promise.resolve(null);
1619
+ }
1616
1620
  function consumePendingMailto() {
1617
1621
  return ipc().consumePendingMailto?.() ?? Promise.resolve(null);
1618
1622
  }