@bobfrankston/mailx 1.0.451 → 1.0.452

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 (198) hide show
  1. package/bin/mailx.js.map +1 -0
  2. package/bin/mailx.ts +1498 -0
  3. package/bin/postinstall.js.map +1 -0
  4. package/bin/postinstall.ts +41 -0
  5. package/bin/tsconfig.json +10 -0
  6. package/client/.gitattributes +10 -0
  7. package/client/app.js +51 -2
  8. package/client/app.js.map +1 -0
  9. package/client/app.ts +3112 -0
  10. package/client/components/address-book.js.map +1 -0
  11. package/client/components/address-book.ts +204 -0
  12. package/client/components/alarms.js.map +1 -0
  13. package/client/components/alarms.ts +276 -0
  14. package/client/components/calendar-sidebar.js.map +1 -0
  15. package/client/components/calendar-sidebar.ts +474 -0
  16. package/client/components/calendar.js.map +1 -0
  17. package/client/components/calendar.ts +211 -0
  18. package/client/components/context-menu.js.map +1 -0
  19. package/client/components/context-menu.ts +95 -0
  20. package/client/components/folder-picker.js.map +1 -0
  21. package/client/components/folder-picker.ts +127 -0
  22. package/client/components/folder-tree.js.map +1 -0
  23. package/client/components/folder-tree.ts +1069 -0
  24. package/client/components/message-list.js.map +1 -0
  25. package/client/components/message-list.ts +1129 -0
  26. package/client/components/message-viewer.js.map +1 -0
  27. package/client/components/message-viewer.ts +1257 -0
  28. package/client/components/outbox-view.js.map +1 -0
  29. package/client/components/outbox-view.ts +102 -0
  30. package/client/components/tasks.js.map +1 -0
  31. package/client/components/tasks.ts +234 -0
  32. package/client/compose/compose.js.map +1 -0
  33. package/client/compose/compose.ts +1231 -0
  34. package/client/compose/editor.js.map +1 -0
  35. package/client/compose/editor.ts +599 -0
  36. package/client/compose/ghost-text.js.map +1 -0
  37. package/client/compose/ghost-text.ts +140 -0
  38. package/client/index.html +1 -0
  39. package/client/lib/android-bootstrap.js.map +1 -0
  40. package/client/lib/android-bootstrap.ts +9 -0
  41. package/client/lib/api-client.js.map +1 -0
  42. package/client/lib/api-client.ts +439 -0
  43. package/client/lib/local-service.js.map +1 -0
  44. package/client/lib/local-service.ts +646 -0
  45. package/client/lib/local-store.js.map +1 -0
  46. package/client/lib/local-store.ts +283 -0
  47. package/client/lib/message-state.js.map +1 -0
  48. package/client/lib/message-state.ts +140 -0
  49. package/client/tsconfig.json +19 -0
  50. package/package.json +15 -15
  51. package/packages/mailx-api/.gitattributes +10 -0
  52. package/packages/mailx-api/index.d.ts.map +1 -0
  53. package/packages/mailx-api/index.js.map +1 -0
  54. package/packages/mailx-api/index.ts +283 -0
  55. package/packages/mailx-api/tsconfig.json +9 -0
  56. package/packages/mailx-compose/.gitattributes +10 -0
  57. package/packages/mailx-compose/index.d.ts.map +1 -0
  58. package/packages/mailx-compose/index.js.map +1 -0
  59. package/packages/mailx-compose/index.ts +85 -0
  60. package/packages/mailx-compose/tsconfig.json +9 -0
  61. package/packages/mailx-core/index.d.ts.map +1 -0
  62. package/packages/mailx-core/index.js.map +1 -0
  63. package/packages/mailx-core/index.ts +424 -0
  64. package/packages/mailx-core/ipc.d.ts.map +1 -0
  65. package/packages/mailx-core/ipc.js.map +1 -0
  66. package/packages/mailx-core/ipc.ts +62 -0
  67. package/packages/mailx-core/tsconfig.json +9 -0
  68. package/packages/mailx-host/.gitattributes +10 -0
  69. package/packages/mailx-host/index.d.ts.map +1 -0
  70. package/packages/mailx-host/index.js.map +1 -0
  71. package/packages/mailx-host/index.ts +38 -0
  72. package/packages/mailx-host/package.json +10 -2
  73. package/packages/mailx-host/tsconfig.json +9 -0
  74. package/packages/mailx-send/.gitattributes +10 -0
  75. package/packages/mailx-send/cli-queue.d.ts.map +1 -0
  76. package/packages/mailx-send/cli-queue.js.map +1 -0
  77. package/packages/mailx-send/cli-queue.ts +62 -0
  78. package/packages/mailx-send/cli-send.d.ts.map +1 -0
  79. package/packages/mailx-send/cli-send.js.map +1 -0
  80. package/packages/mailx-send/cli-send.ts +83 -0
  81. package/packages/mailx-send/cli.d.ts.map +1 -0
  82. package/packages/mailx-send/cli.js.map +1 -0
  83. package/packages/mailx-send/cli.ts +126 -0
  84. package/packages/mailx-send/index.d.ts.map +1 -0
  85. package/packages/mailx-send/index.js.map +1 -0
  86. package/packages/mailx-send/index.ts +333 -0
  87. package/packages/mailx-send/mailsend/cli.d.ts.map +1 -0
  88. package/packages/mailx-send/mailsend/cli.js.map +1 -0
  89. package/packages/mailx-send/mailsend/cli.ts +81 -0
  90. package/packages/mailx-send/mailsend/index.d.ts.map +1 -0
  91. package/packages/mailx-send/mailsend/index.js.map +1 -0
  92. package/packages/mailx-send/mailsend/index.ts +333 -0
  93. package/packages/mailx-send/mailsend/package-lock.json +65 -0
  94. package/packages/mailx-send/mailsend/tsconfig.json +21 -0
  95. package/packages/mailx-send/package-lock.json +65 -0
  96. package/packages/mailx-send/package.json +1 -1
  97. package/packages/mailx-send/tsconfig.json +21 -0
  98. package/packages/mailx-server/.gitattributes +10 -0
  99. package/packages/mailx-server/index.d.ts.map +1 -0
  100. package/packages/mailx-server/index.js.map +1 -0
  101. package/packages/mailx-server/index.ts +429 -0
  102. package/packages/mailx-server/tsconfig.json +9 -0
  103. package/packages/mailx-service/google-sync.d.ts.map +1 -0
  104. package/packages/mailx-service/google-sync.js.map +1 -0
  105. package/packages/mailx-service/google-sync.ts +238 -0
  106. package/packages/mailx-service/index.d.ts.map +1 -0
  107. package/packages/mailx-service/index.js.map +1 -0
  108. package/packages/mailx-service/index.ts +2461 -0
  109. package/packages/mailx-service/jsonrpc.d.ts.map +1 -0
  110. package/packages/mailx-service/jsonrpc.js.map +1 -0
  111. package/packages/mailx-service/jsonrpc.ts +268 -0
  112. package/packages/mailx-service/tsconfig.json +9 -0
  113. package/packages/mailx-settings/.gitattributes +10 -0
  114. package/packages/mailx-settings/cloud.d.ts.map +1 -0
  115. package/packages/mailx-settings/cloud.js.map +1 -0
  116. package/packages/mailx-settings/cloud.ts +388 -0
  117. package/packages/mailx-settings/index.d.ts.map +1 -0
  118. package/packages/mailx-settings/index.js.map +1 -0
  119. package/packages/mailx-settings/index.ts +892 -0
  120. package/packages/mailx-settings/tsconfig.json +9 -0
  121. package/packages/mailx-store/.gitattributes +10 -0
  122. package/packages/mailx-store/db.d.ts.map +1 -0
  123. package/packages/mailx-store/db.js.map +1 -0
  124. package/packages/mailx-store/db.ts +2007 -0
  125. package/packages/mailx-store/file-store.d.ts.map +1 -0
  126. package/packages/mailx-store/file-store.js.map +1 -0
  127. package/packages/mailx-store/file-store.ts +82 -0
  128. package/packages/mailx-store/index.d.ts.map +1 -0
  129. package/packages/mailx-store/index.js.map +1 -0
  130. package/packages/mailx-store/index.ts +7 -0
  131. package/packages/mailx-store/tsconfig.json +9 -0
  132. package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -0
  133. package/packages/mailx-store-web/android-bootstrap.js.map +1 -0
  134. package/packages/mailx-store-web/android-bootstrap.ts +1262 -0
  135. package/packages/mailx-store-web/db.d.ts.map +1 -0
  136. package/packages/mailx-store-web/db.js.map +1 -0
  137. package/packages/mailx-store-web/db.ts +756 -0
  138. package/packages/mailx-store-web/gmail-api-web.d.ts.map +1 -0
  139. package/packages/mailx-store-web/gmail-api-web.js.map +1 -0
  140. package/packages/mailx-store-web/gmail-api-web.ts +11 -0
  141. package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -0
  142. package/packages/mailx-store-web/imap-web-provider.js.map +1 -0
  143. package/packages/mailx-store-web/imap-web-provider.ts +156 -0
  144. package/packages/mailx-store-web/index.d.ts.map +1 -0
  145. package/packages/mailx-store-web/index.js.map +1 -0
  146. package/packages/mailx-store-web/index.ts +10 -0
  147. package/packages/mailx-store-web/main-thread-host.d.ts.map +1 -0
  148. package/packages/mailx-store-web/main-thread-host.js.map +1 -0
  149. package/packages/mailx-store-web/main-thread-host.ts +322 -0
  150. package/packages/mailx-store-web/package.json +4 -4
  151. package/packages/mailx-store-web/provider-types.d.ts.map +1 -0
  152. package/packages/mailx-store-web/provider-types.js.map +1 -0
  153. package/packages/mailx-store-web/provider-types.ts +7 -0
  154. package/packages/mailx-store-web/sync-manager.d.ts.map +1 -0
  155. package/packages/mailx-store-web/sync-manager.js.map +1 -0
  156. package/packages/mailx-store-web/sync-manager.ts +508 -0
  157. package/packages/mailx-store-web/tsconfig.json +10 -0
  158. package/packages/mailx-store-web/web-jsonrpc.d.ts.map +1 -0
  159. package/packages/mailx-store-web/web-jsonrpc.js.map +1 -0
  160. package/packages/mailx-store-web/web-jsonrpc.ts +116 -0
  161. package/packages/mailx-store-web/web-message-store.d.ts.map +1 -0
  162. package/packages/mailx-store-web/web-message-store.js.map +1 -0
  163. package/packages/mailx-store-web/web-message-store.ts +97 -0
  164. package/packages/mailx-store-web/web-service.d.ts.map +1 -0
  165. package/packages/mailx-store-web/web-service.js.map +1 -0
  166. package/packages/mailx-store-web/web-service.ts +616 -0
  167. package/packages/mailx-store-web/web-settings.d.ts.map +1 -0
  168. package/packages/mailx-store-web/web-settings.js.map +1 -0
  169. package/packages/mailx-store-web/web-settings.ts +522 -0
  170. package/packages/mailx-store-web/worker-entry.d.ts.map +1 -0
  171. package/packages/mailx-store-web/worker-entry.js.map +1 -0
  172. package/packages/mailx-store-web/worker-entry.ts +215 -0
  173. package/packages/mailx-store-web/worker-tcp-transport.d.ts.map +1 -0
  174. package/packages/mailx-store-web/worker-tcp-transport.js.map +1 -0
  175. package/packages/mailx-store-web/worker-tcp-transport.ts +101 -0
  176. package/packages/mailx-types/.gitattributes +10 -0
  177. package/packages/mailx-types/index.d.ts.map +1 -0
  178. package/packages/mailx-types/index.js.map +1 -0
  179. package/packages/mailx-types/index.ts +498 -0
  180. package/packages/mailx-types/tsconfig.json +9 -0
  181. package/tsconfig.base.json +2 -1
  182. package/tsconfig.json +9 -0
  183. package/build-apk.cmd +0 -3
  184. package/npmg.bat +0 -6
  185. package/packages/mailx-imap/index.d.ts +0 -442
  186. package/packages/mailx-imap/index.js +0 -3684
  187. package/packages/mailx-imap/package.json +0 -25
  188. package/packages/mailx-imap/providers/gmail-api.d.ts +0 -8
  189. package/packages/mailx-imap/providers/gmail-api.js +0 -8
  190. package/packages/mailx-imap/providers/types.d.ts +0 -9
  191. package/packages/mailx-imap/providers/types.js +0 -9
  192. package/packages/mailx-imap/tsconfig.tsbuildinfo +0 -1
  193. package/rebuild.cmd +0 -23
  194. package/tdview.cmd +0 -2
  195. package/temp.ps1 +0 -10
  196. package/test-smtp-direct.mjs +0 -4
  197. package/unbash.cmd +0 -55
  198. package/unwedge.cmd +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-book.js","sourceRoot":"","sources":["address-book.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Address book modal — list / search / edit / delete contacts.
3
+ * Sources: 'sent' (added on outgoing), 'received' (seeded from message senders),
4
+ * 'manual' (added directly here), 'google' (Google Contacts sync).
5
+ */
6
+ import { listContacts, upsertContact, deleteContact } from "../lib/api-client.js";
7
+
8
+ interface Contact {
9
+ name: string;
10
+ email: string;
11
+ source: string;
12
+ useCount: number;
13
+ lastUsed: number;
14
+ }
15
+
16
+ let isOpen = false;
17
+
18
+ export async function openAddressBook(): Promise<void> {
19
+ if (isOpen) return;
20
+ isOpen = true;
21
+
22
+ const backdrop = document.createElement("div");
23
+ backdrop.className = "mailx-modal-backdrop";
24
+ const panel = document.createElement("div");
25
+ panel.className = "mailx-modal mailx-modal-wide";
26
+ panel.innerHTML = `
27
+ <div class="mailx-modal-title">
28
+ <span class="mailx-modal-title-text">Address Book</span>
29
+ <button type="button" class="mailx-modal-close" id="ab-close" title="Close (Esc)" aria-label="Close">&times;</button>
30
+ </div>
31
+ <div class="ab-toolbar">
32
+ <input type="search" id="ab-search" class="mailx-modal-input" placeholder="Search name or email…" autocomplete="off">
33
+ <button type="button" class="mailx-modal-btn mailx-modal-btn-primary" id="ab-new">+ New contact</button>
34
+ </div>
35
+ <div class="ab-count" id="ab-count"></div>
36
+ <div class="ab-list" id="ab-list">Loading…</div>
37
+ <div class="mailx-modal-buttons">
38
+ <span class="mailx-modal-spacer"></span>
39
+ <button type="button" class="mailx-modal-btn" data-action="close">Close</button>
40
+ </div>`;
41
+ backdrop.appendChild(panel);
42
+ document.body.appendChild(backdrop);
43
+
44
+ const searchInput = panel.querySelector<HTMLInputElement>("#ab-search")!;
45
+ const listEl = panel.querySelector<HTMLElement>("#ab-list")!;
46
+ const countEl = panel.querySelector<HTMLElement>("#ab-count")!;
47
+
48
+ let editingEmail: string | null = null;
49
+
50
+ const render = (items: Contact[], total: number) => {
51
+ countEl.textContent = total === items.length
52
+ ? `${total} contact${total === 1 ? "" : "s"}`
53
+ : `Showing ${items.length} of ${total}`;
54
+ if (items.length === 0) {
55
+ listEl.innerHTML = `<div class="ab-empty">No contacts match.</div>`;
56
+ return;
57
+ }
58
+ const fmtDate = (ms: number) => {
59
+ if (!ms) return "";
60
+ const d = new Date(ms);
61
+ const now = new Date();
62
+ return d.getFullYear() === now.getFullYear()
63
+ ? d.toLocaleDateString(undefined, { month: "short", day: "numeric" })
64
+ : d.toLocaleDateString();
65
+ };
66
+ listEl.innerHTML = `
67
+ <div class="ab-row ab-header">
68
+ <span class="ab-name">Name</span>
69
+ <span class="ab-email">Email</span>
70
+ <span class="ab-source">Source</span>
71
+ <span class="ab-count-cell" title="Times sent to">×</span>
72
+ <span class="ab-last">Last</span>
73
+ <span class="ab-actions"></span>
74
+ </div>` + items.map(c => `
75
+ <div class="ab-row" data-email="${escapeAttr(c.email)}">
76
+ <span class="ab-name">${escapeHtml(c.name || "")}</span>
77
+ <span class="ab-email">${escapeHtml(c.email)}</span>
78
+ <span class="ab-source">${escapeHtml(c.source)}</span>
79
+ <span class="ab-count-cell">${c.useCount || 0}</span>
80
+ <span class="ab-last">${fmtDate(c.lastUsed)}</span>
81
+ <span class="ab-actions">
82
+ <button type="button" class="ab-edit" title="Edit name">✎</button>
83
+ <button type="button" class="ab-del" title="Delete">🗑</button>
84
+ <button type="button" class="ab-mail" title="Compose to">✉</button>
85
+ </span>
86
+ </div>`).join("");
87
+ listEl.querySelectorAll<HTMLElement>(".ab-row[data-email]").forEach(row => {
88
+ const email = row.dataset.email!;
89
+ const c = items.find(x => x.email === email)!;
90
+ row.querySelector(".ab-edit")?.addEventListener("click", () => beginEdit(row, c));
91
+ row.querySelector(".ab-del")?.addEventListener("click", () => doDelete(c));
92
+ row.querySelector(".ab-mail")?.addEventListener("click", () => composeTo(c));
93
+ });
94
+ };
95
+
96
+ const beginEdit = (row: HTMLElement, c: Contact) => {
97
+ if (editingEmail === c.email) return;
98
+ editingEmail = c.email;
99
+ const nameSpan = row.querySelector<HTMLElement>(".ab-name")!;
100
+ const original = c.name || "";
101
+ nameSpan.innerHTML = `<input type="text" value="${escapeAttr(original)}" class="ab-name-input">`;
102
+ const inp = nameSpan.querySelector<HTMLInputElement>("input")!;
103
+ inp.focus();
104
+ inp.select();
105
+ const commit = async () => {
106
+ const newName = inp.value.trim();
107
+ if (newName !== original) {
108
+ try {
109
+ await upsertContact(newName, c.email);
110
+ c.name = newName;
111
+ } catch (e: any) {
112
+ alert(`Update failed: ${e?.message || e}`);
113
+ }
114
+ }
115
+ nameSpan.textContent = c.name || "";
116
+ editingEmail = null;
117
+ };
118
+ inp.addEventListener("blur", commit);
119
+ inp.addEventListener("keydown", (e) => {
120
+ if (e.key === "Enter") { e.preventDefault(); inp.blur(); }
121
+ else if (e.key === "Escape") { e.preventDefault(); inp.value = original; inp.blur(); }
122
+ });
123
+ };
124
+
125
+ const doDelete = async (c: Contact) => {
126
+ if (!confirm(`Delete contact "${c.name || c.email}"?`)) return;
127
+ try {
128
+ await deleteContact(c.email);
129
+ await reload();
130
+ } catch (e: any) {
131
+ alert(`Delete failed: ${e?.message || e}`);
132
+ }
133
+ };
134
+
135
+ const composeTo = (c: Contact) => {
136
+ const init: {
137
+ mode: string;
138
+ to: { name: string; address: string }[];
139
+ cc: { name: string; address: string }[];
140
+ bcc: { name: string; address: string }[];
141
+ subject: string;
142
+ bodyHtml: string;
143
+ inReplyTo: string;
144
+ references: string[];
145
+ accounts: { id: string; name: string; email: string }[];
146
+ } = {
147
+ mode: "new",
148
+ to: [{ name: c.name || "", address: c.email }],
149
+ cc: [], bcc: [], subject: "", bodyHtml: "",
150
+ inReplyTo: "", references: [], accounts: [],
151
+ };
152
+ try { sessionStorage.setItem("composeInit", JSON.stringify(init)); } catch { /* */ }
153
+ document.dispatchEvent(new CustomEvent("mailx-compose", { detail: { mode: "new" } }));
154
+ close();
155
+ };
156
+
157
+ let reloadDebounce: number | undefined;
158
+ const reload = async () => {
159
+ try {
160
+ const r = await listContacts(searchInput.value, 1, 200);
161
+ render(r.items, r.total);
162
+ } catch (e: any) {
163
+ listEl.innerHTML = `<div class="ab-empty">Load failed: ${escapeHtml(e?.message || String(e))}</div>`;
164
+ }
165
+ };
166
+ const scheduleReload = () => {
167
+ if (reloadDebounce) window.clearTimeout(reloadDebounce);
168
+ reloadDebounce = window.setTimeout(reload, 200);
169
+ };
170
+
171
+ panel.querySelector<HTMLButtonElement>("#ab-new")?.addEventListener("click", async () => {
172
+ const email = prompt("Email address:");
173
+ if (!email) return;
174
+ const name = prompt("Display name (optional):") || "";
175
+ try {
176
+ await upsertContact(name, email.trim());
177
+ await reload();
178
+ } catch (e: any) {
179
+ alert(`Add failed: ${e?.message || e}`);
180
+ }
181
+ });
182
+ searchInput.addEventListener("input", scheduleReload);
183
+
184
+ const close = () => {
185
+ if (reloadDebounce) window.clearTimeout(reloadDebounce);
186
+ backdrop.remove();
187
+ document.removeEventListener("keydown", onKey, true);
188
+ isOpen = false;
189
+ };
190
+ const onKey = (e: KeyboardEvent) => {
191
+ if (e.key === "Escape") { e.stopPropagation(); e.preventDefault(); close(); }
192
+ };
193
+ document.addEventListener("keydown", onKey, true);
194
+ panel.querySelector<HTMLButtonElement>("#ab-close")!.addEventListener("click", close);
195
+ panel.querySelector<HTMLButtonElement>('[data-action="close"]')!.addEventListener("click", close);
196
+ backdrop.addEventListener("mousedown", (e) => { if (e.target === backdrop) close(); });
197
+
198
+ await reload();
199
+ }
200
+
201
+ function escapeHtml(s: string): string {
202
+ return s.replace(/[&<>"']/g, c => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", "\"": "&quot;", "'": "&#39;" }[c]!));
203
+ }
204
+ function escapeAttr(s: string): string { return escapeHtml(s); }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarms.js","sourceRoot":"","sources":["alarms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Alarm subsystem — Thunderbird/Outlook-style reminder popups.
3
+ *
4
+ * Design decisions (2026-04-24):
5
+ * - One shared subsystem for calendar events + tasks (+ future mail reminders).
6
+ * - Popup shows item title, scheduled time, Snooze (5 / 15 / 30 min / 1 hr /
7
+ * custom), Dismiss. Snooze delays the alarm by the chosen interval; Dismiss
8
+ * suppresses it permanently.
9
+ * - Dismissed / snoozed state lives in localStorage (per-device). Google
10
+ * Calendar's own reminders aren't mutated by this — mailx's popup is a
11
+ * local convenience, not a reminder-authority replacement.
12
+ * - Default lead time: 10 min before calendar event start; at task due time
13
+ * for tasks. Per-event overrides from Google Calendar's `reminders.overrides`
14
+ * are a follow-up (we don't currently fetch that field).
15
+ *
16
+ * Check cadence: every 30 s while the tab/window is focused. No check when
17
+ * hidden — alarm won't fire until user returns, which matches Thunderbird's
18
+ * behavior (focus-gated). OS-level notifications are a separate follow-up.
19
+ */
20
+
21
+ import { getCalendarEvents, getTasks } from "../lib/api-client.js";
22
+
23
+ const DISMISSED_KEY = "mailx-alarm-dismissed"; // { uuid: true }
24
+ const SNOOZED_KEY = "mailx-alarm-snoozed"; // { uuid: epoch-ms-end }
25
+ const CAL_LEAD_MS = 10 * 60 * 1000; // 10 min before cal event start
26
+ const LOOKBACK_MS = 60 * 60 * 1000; // fire past-due alarms from the last 60 min
27
+ const LOOKAHEAD_MS = 2 * 60 * 60 * 1000; // poll window: upcoming 2 hr
28
+ const POLL_INTERVAL_MS = 30_000;
29
+
30
+ interface AlarmItem {
31
+ uuid: string;
32
+ kind: "calendar" | "task";
33
+ title: string;
34
+ /** When the alarm should fire (epoch ms). */
35
+ alarmMs: number;
36
+ /** When the source event actually starts / is due (epoch ms) — shown in popup. */
37
+ whenMs: number;
38
+ /** Optional web link for "view in browser". */
39
+ htmlLink?: string;
40
+ }
41
+
42
+ function loadDismissed(): Record<string, boolean> {
43
+ try { return JSON.parse(localStorage.getItem(DISMISSED_KEY) || "{}"); } catch { return {}; }
44
+ }
45
+ function saveDismissed(map: Record<string, boolean>): void {
46
+ try { localStorage.setItem(DISMISSED_KEY, JSON.stringify(map)); } catch { /* private mode */ }
47
+ }
48
+ function loadSnoozed(): Record<string, number> {
49
+ try { return JSON.parse(localStorage.getItem(SNOOZED_KEY) || "{}"); } catch { return {}; }
50
+ }
51
+ function saveSnoozed(map: Record<string, number>): void {
52
+ try { localStorage.setItem(SNOOZED_KEY, JSON.stringify(map)); } catch { /* */ }
53
+ }
54
+
55
+ /** Prune expired entries so the maps don't grow forever. */
56
+ function pruneState(now: number): void {
57
+ const snoozed = loadSnoozed();
58
+ let changed = false;
59
+ for (const [uuid, until] of Object.entries(snoozed)) {
60
+ // Snoozed entries older than 7 days have been fired already (or the
61
+ // event is long past); drop them.
62
+ if (until < now - 7 * 86400_000) { delete snoozed[uuid]; changed = true; }
63
+ }
64
+ if (changed) saveSnoozed(snoozed);
65
+ // Dismissed is sparse — don't bother pruning aggressively.
66
+ }
67
+
68
+ async function collectDueAlarms(now: number): Promise<AlarmItem[]> {
69
+ const dismissed = loadDismissed();
70
+ const snoozed = loadSnoozed();
71
+ const items: AlarmItem[] = [];
72
+
73
+ try {
74
+ const events = await getCalendarEvents(now - LOOKBACK_MS, now + LOOKAHEAD_MS);
75
+ for (const ev of events) {
76
+ if (!ev.uuid) continue;
77
+ if (dismissed[ev.uuid]) continue;
78
+ const alarm = (ev.start || 0) - CAL_LEAD_MS;
79
+ const effective = snoozed[ev.uuid] || alarm;
80
+ if (effective <= now && effective > now - LOOKBACK_MS) {
81
+ items.push({
82
+ uuid: ev.uuid, kind: "calendar",
83
+ title: ev.title || "(no title)",
84
+ alarmMs: effective, whenMs: ev.start || 0,
85
+ htmlLink: ev.htmlLink,
86
+ });
87
+ }
88
+ }
89
+ } catch { /* sidebar will surface API errors; alarm path stays quiet */ }
90
+
91
+ try {
92
+ const tasks = await getTasks(false);
93
+ for (const t of tasks) {
94
+ if (!t.uuid || !t.dueMs) continue;
95
+ if (dismissed[t.uuid]) continue;
96
+ const effective = snoozed[t.uuid] || t.dueMs;
97
+ if (effective <= now && effective > now - LOOKBACK_MS) {
98
+ items.push({
99
+ uuid: t.uuid, kind: "task",
100
+ title: t.title || "(no title)",
101
+ alarmMs: effective, whenMs: t.dueMs,
102
+ });
103
+ }
104
+ }
105
+ } catch { /* */ }
106
+
107
+ return items;
108
+ }
109
+
110
+ function formatWhen(ms: number): string {
111
+ if (!ms) return "";
112
+ const d = new Date(ms);
113
+ return d.toLocaleString(undefined, { weekday: "short", month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" });
114
+ }
115
+
116
+ let currentPopup: HTMLElement | null = null;
117
+ let firedThisSession = new Set<string>();
118
+
119
+ function showPopup(items: AlarmItem[]): void {
120
+ if (currentPopup) return; // another popup already up
121
+ if (items.length === 0) return;
122
+ const overlay = document.createElement("div");
123
+ overlay.className = "alarm-overlay";
124
+ const panel = document.createElement("div");
125
+ panel.className = "alarm-panel";
126
+ panel.innerHTML = `
127
+ <div class="alarm-head">
128
+ <span class="alarm-icon">⏰</span>
129
+ <span class="alarm-title">${items.length} reminder${items.length > 1 ? "s" : ""}</span>
130
+ <button type="button" class="alarm-close" aria-label="Close">&times;</button>
131
+ </div>
132
+ <div class="alarm-list"></div>
133
+ <div class="alarm-foot">
134
+ <label class="alarm-snooze-label">Snooze for
135
+ <select class="alarm-snooze-sel">
136
+ <option value="5">5 minutes</option>
137
+ <option value="15" selected>15 minutes</option>
138
+ <option value="30">30 minutes</option>
139
+ <option value="60">1 hour</option>
140
+ <option value="240">4 hours</option>
141
+ <option value="1440">1 day</option>
142
+ <option value="custom">custom…</option>
143
+ </select>
144
+ </label>
145
+ <span style="flex:1"></span>
146
+ <button type="button" class="alarm-btn alarm-btn-snooze">Snooze all</button>
147
+ <button type="button" class="alarm-btn alarm-btn-primary alarm-btn-dismiss">Dismiss all</button>
148
+ </div>
149
+ `;
150
+ const list = panel.querySelector(".alarm-list")!;
151
+ for (const it of items) {
152
+ const row = document.createElement("div");
153
+ row.className = "alarm-row";
154
+ row.dataset.uuid = it.uuid;
155
+ row.innerHTML = `
156
+ <div class="alarm-row-main">
157
+ <span class="alarm-row-kind">${it.kind === "calendar" ? "📅" : "☑"}</span>
158
+ <span class="alarm-row-title"></span>
159
+ <span class="alarm-row-when"></span>
160
+ </div>
161
+ <div class="alarm-row-actions">
162
+ ${it.htmlLink ? `<button type="button" class="alarm-row-link" data-link="${it.htmlLink}" title="View in browser">↗</button>` : ""}
163
+ <button type="button" class="alarm-row-dismiss" title="Dismiss this one">✕</button>
164
+ </div>
165
+ `;
166
+ (row.querySelector(".alarm-row-title") as HTMLElement).textContent = it.title;
167
+ (row.querySelector(".alarm-row-when") as HTMLElement).textContent = formatWhen(it.whenMs);
168
+ list.appendChild(row);
169
+ }
170
+ overlay.appendChild(panel);
171
+ document.body.appendChild(overlay);
172
+ currentPopup = overlay;
173
+
174
+ // Pin the mailx window above other apps while a reminder is showing —
175
+ // matches Thunderbird's reminder dialog behavior. Cleared on close so
176
+ // the window doesn't stay always-on-top once the user has acknowledged.
177
+ // No-op in browser fallback (msgapi only present in WebView2).
178
+ const msgapi: any = (window as any).msgapi;
179
+ try { msgapi?.setAlwaysOnTop?.(true); } catch { /* */ }
180
+
181
+ const snoozeMinutes = (): number | null => {
182
+ const sel = panel.querySelector<HTMLSelectElement>(".alarm-snooze-sel")!;
183
+ if (sel.value === "custom") {
184
+ const v = prompt("Snooze for how many minutes?", "30");
185
+ const n = parseInt(v || "", 10);
186
+ return Number.isFinite(n) && n > 0 ? n : null;
187
+ }
188
+ return parseInt(sel.value, 10);
189
+ };
190
+
191
+ const snoozeAll = (minutes: number): void => {
192
+ const now = Date.now();
193
+ const map = loadSnoozed();
194
+ for (const it of items) map[it.uuid] = now + minutes * 60_000;
195
+ saveSnoozed(map);
196
+ for (const it of items) firedThisSession.delete(it.uuid);
197
+ close();
198
+ };
199
+ const dismissAll = (): void => {
200
+ const map = loadDismissed();
201
+ for (const it of items) map[it.uuid] = true;
202
+ saveDismissed(map);
203
+ close();
204
+ };
205
+
206
+ const close = () => {
207
+ overlay.remove();
208
+ currentPopup = null;
209
+ try { msgapi?.setAlwaysOnTop?.(false); } catch { /* */ }
210
+ };
211
+
212
+ panel.querySelector(".alarm-close")?.addEventListener("click", close);
213
+ panel.querySelector(".alarm-btn-snooze")?.addEventListener("click", () => {
214
+ const n = snoozeMinutes();
215
+ if (n) snoozeAll(n);
216
+ });
217
+ panel.querySelector(".alarm-btn-dismiss")?.addEventListener("click", dismissAll);
218
+
219
+ panel.querySelectorAll<HTMLButtonElement>(".alarm-row-dismiss").forEach(btn => {
220
+ btn.addEventListener("click", () => {
221
+ const row = btn.closest<HTMLElement>(".alarm-row");
222
+ const uuid = row?.dataset.uuid;
223
+ if (!uuid) return;
224
+ const map = loadDismissed();
225
+ map[uuid] = true;
226
+ saveDismissed(map);
227
+ row!.remove();
228
+ if (panel.querySelector(".alarm-list")?.childElementCount === 0) close();
229
+ });
230
+ });
231
+ panel.querySelectorAll<HTMLButtonElement>(".alarm-row-link").forEach(btn => {
232
+ btn.addEventListener("click", () => {
233
+ const url = btn.dataset.link;
234
+ if (!url) return;
235
+ const api = (window as any).mailxapi;
236
+ if (api?.openExternal) api.openExternal(url);
237
+ else window.open(url, "_blank");
238
+ });
239
+ });
240
+
241
+ // Escape closes without action (same as X) — user can re-open with next
242
+ // poll tick by not acting on it.
243
+ const onKey = (e: KeyboardEvent) => {
244
+ if (e.key === "Escape") { e.stopPropagation(); close(); document.removeEventListener("keydown", onKey, true); }
245
+ };
246
+ document.addEventListener("keydown", onKey, true);
247
+ }
248
+
249
+ async function pollAlarms(): Promise<void> {
250
+ if (document.hidden) return; // don't fire while tab hidden
251
+ if (currentPopup) return; // user hasn't acknowledged last one
252
+ const now = Date.now();
253
+ pruneState(now);
254
+ const due = await collectDueAlarms(now);
255
+ // Only show items we haven't already fired this session (prevents the
256
+ // popup from immediately re-appearing if the user closes it without
257
+ // dismissing — the item still matches the "due" filter next tick).
258
+ const fresh = due.filter(d => !firedThisSession.has(d.uuid));
259
+ if (fresh.length === 0) return;
260
+ for (const d of fresh) firedThisSession.add(d.uuid);
261
+ showPopup(fresh);
262
+ }
263
+
264
+ /** Start the alarm poller. Called from app.ts on startup. */
265
+ export function startAlarmPoller(): void {
266
+ if ((window as any).__mailxAlarmPollerRunning) return;
267
+ (window as any).__mailxAlarmPollerRunning = true;
268
+ // First check after 5 s so startup isn't jittered by a modal.
269
+ setTimeout(() => { pollAlarms().catch(() => { /* */ }); }, 5000);
270
+ setInterval(() => { pollAlarms().catch(() => { /* */ }); }, POLL_INTERVAL_MS);
271
+ // Re-check on visibility change — if the user comes back to the tab
272
+ // after an hour away, they should see anything they missed immediately.
273
+ document.addEventListener("visibilitychange", () => {
274
+ if (!document.hidden) pollAlarms().catch(() => { /* */ });
275
+ });
276
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-sidebar.js","sourceRoot":"","sources":["calendar-sidebar.ts"],"names":[],"mappings":"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"}