@bobfrankston/mailx 1.0.451 → 1.0.453

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 (205) 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 +18 -16
  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/package.json +1 -1
  56. package/packages/mailx-api/tsconfig.json +9 -0
  57. package/packages/mailx-compose/.gitattributes +10 -0
  58. package/packages/mailx-compose/index.d.ts.map +1 -0
  59. package/packages/mailx-compose/index.js.map +1 -0
  60. package/packages/mailx-compose/index.ts +85 -0
  61. package/packages/mailx-compose/tsconfig.json +9 -0
  62. package/packages/mailx-core/index.d.ts.map +1 -0
  63. package/packages/mailx-core/index.js.map +1 -0
  64. package/packages/mailx-core/index.ts +424 -0
  65. package/packages/mailx-core/ipc.d.ts.map +1 -0
  66. package/packages/mailx-core/ipc.js.map +1 -0
  67. package/packages/mailx-core/ipc.ts +62 -0
  68. package/packages/mailx-core/package.json +1 -1
  69. package/packages/mailx-core/tsconfig.json +9 -0
  70. package/packages/mailx-host/.gitattributes +10 -0
  71. package/packages/mailx-host/index.d.ts.map +1 -0
  72. package/packages/mailx-host/index.js.map +1 -0
  73. package/packages/mailx-host/index.ts +38 -0
  74. package/packages/mailx-host/package.json +10 -2
  75. package/packages/mailx-host/tsconfig.json +9 -0
  76. package/packages/mailx-send/.gitattributes +10 -0
  77. package/packages/mailx-send/cli-queue.d.ts.map +1 -0
  78. package/packages/mailx-send/cli-queue.js.map +1 -0
  79. package/packages/mailx-send/cli-queue.ts +62 -0
  80. package/packages/mailx-send/cli-send.d.ts.map +1 -0
  81. package/packages/mailx-send/cli-send.js.map +1 -0
  82. package/packages/mailx-send/cli-send.ts +83 -0
  83. package/packages/mailx-send/cli.d.ts.map +1 -0
  84. package/packages/mailx-send/cli.js.map +1 -0
  85. package/packages/mailx-send/cli.ts +126 -0
  86. package/packages/mailx-send/index.d.ts.map +1 -0
  87. package/packages/mailx-send/index.js.map +1 -0
  88. package/packages/mailx-send/index.ts +333 -0
  89. package/packages/mailx-send/mailsend/cli.d.ts.map +1 -0
  90. package/packages/mailx-send/mailsend/cli.js.map +1 -0
  91. package/packages/mailx-send/mailsend/cli.ts +81 -0
  92. package/packages/mailx-send/mailsend/index.d.ts.map +1 -0
  93. package/packages/mailx-send/mailsend/index.js.map +1 -0
  94. package/packages/mailx-send/mailsend/index.ts +333 -0
  95. package/packages/mailx-send/mailsend/package-lock.json +65 -0
  96. package/packages/mailx-send/mailsend/tsconfig.json +21 -0
  97. package/packages/mailx-send/package-lock.json +65 -0
  98. package/packages/mailx-send/package.json +1 -1
  99. package/packages/mailx-send/tsconfig.json +21 -0
  100. package/packages/mailx-server/.gitattributes +10 -0
  101. package/packages/mailx-server/index.d.ts.map +1 -0
  102. package/packages/mailx-server/index.js.map +1 -0
  103. package/packages/mailx-server/index.ts +429 -0
  104. package/packages/mailx-server/package.json +1 -1
  105. package/packages/mailx-server/tsconfig.json +9 -0
  106. package/packages/mailx-service/google-sync.d.ts.map +1 -0
  107. package/packages/mailx-service/google-sync.js.map +1 -0
  108. package/packages/mailx-service/google-sync.ts +238 -0
  109. package/packages/mailx-service/index.d.ts.map +1 -0
  110. package/packages/mailx-service/index.js.map +1 -0
  111. package/packages/mailx-service/index.ts +2461 -0
  112. package/packages/mailx-service/jsonrpc.d.ts.map +1 -0
  113. package/packages/mailx-service/jsonrpc.js.map +1 -0
  114. package/packages/mailx-service/jsonrpc.ts +268 -0
  115. package/packages/mailx-service/package.json +1 -1
  116. package/packages/mailx-service/tsconfig.json +9 -0
  117. package/packages/mailx-settings/.gitattributes +10 -0
  118. package/packages/mailx-settings/cloud.d.ts.map +1 -0
  119. package/packages/mailx-settings/cloud.js.map +1 -0
  120. package/packages/mailx-settings/cloud.ts +388 -0
  121. package/packages/mailx-settings/index.d.ts.map +1 -0
  122. package/packages/mailx-settings/index.js.map +1 -0
  123. package/packages/mailx-settings/index.ts +892 -0
  124. package/packages/mailx-settings/package.json +1 -1
  125. package/packages/mailx-settings/tsconfig.json +9 -0
  126. package/packages/mailx-store/.gitattributes +10 -0
  127. package/packages/mailx-store/db.d.ts.map +1 -0
  128. package/packages/mailx-store/db.js.map +1 -0
  129. package/packages/mailx-store/db.ts +2007 -0
  130. package/packages/mailx-store/file-store.d.ts.map +1 -0
  131. package/packages/mailx-store/file-store.js.map +1 -0
  132. package/packages/mailx-store/file-store.ts +82 -0
  133. package/packages/mailx-store/index.d.ts.map +1 -0
  134. package/packages/mailx-store/index.js.map +1 -0
  135. package/packages/mailx-store/index.ts +7 -0
  136. package/packages/mailx-store/package.json +1 -1
  137. package/packages/mailx-store/tsconfig.json +9 -0
  138. package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -0
  139. package/packages/mailx-store-web/android-bootstrap.js.map +1 -0
  140. package/packages/mailx-store-web/android-bootstrap.ts +1262 -0
  141. package/packages/mailx-store-web/db.d.ts.map +1 -0
  142. package/packages/mailx-store-web/db.js.map +1 -0
  143. package/packages/mailx-store-web/db.ts +756 -0
  144. package/packages/mailx-store-web/gmail-api-web.d.ts.map +1 -0
  145. package/packages/mailx-store-web/gmail-api-web.js.map +1 -0
  146. package/packages/mailx-store-web/gmail-api-web.ts +11 -0
  147. package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -0
  148. package/packages/mailx-store-web/imap-web-provider.js.map +1 -0
  149. package/packages/mailx-store-web/imap-web-provider.ts +156 -0
  150. package/packages/mailx-store-web/index.d.ts.map +1 -0
  151. package/packages/mailx-store-web/index.js.map +1 -0
  152. package/packages/mailx-store-web/index.ts +10 -0
  153. package/packages/mailx-store-web/main-thread-host.d.ts.map +1 -0
  154. package/packages/mailx-store-web/main-thread-host.js.map +1 -0
  155. package/packages/mailx-store-web/main-thread-host.ts +322 -0
  156. package/packages/mailx-store-web/package.json +4 -4
  157. package/packages/mailx-store-web/provider-types.d.ts.map +1 -0
  158. package/packages/mailx-store-web/provider-types.js.map +1 -0
  159. package/packages/mailx-store-web/provider-types.ts +7 -0
  160. package/packages/mailx-store-web/sync-manager.d.ts.map +1 -0
  161. package/packages/mailx-store-web/sync-manager.js.map +1 -0
  162. package/packages/mailx-store-web/sync-manager.ts +508 -0
  163. package/packages/mailx-store-web/tsconfig.json +10 -0
  164. package/packages/mailx-store-web/web-jsonrpc.d.ts.map +1 -0
  165. package/packages/mailx-store-web/web-jsonrpc.js.map +1 -0
  166. package/packages/mailx-store-web/web-jsonrpc.ts +116 -0
  167. package/packages/mailx-store-web/web-message-store.d.ts.map +1 -0
  168. package/packages/mailx-store-web/web-message-store.js.map +1 -0
  169. package/packages/mailx-store-web/web-message-store.ts +97 -0
  170. package/packages/mailx-store-web/web-service.d.ts.map +1 -0
  171. package/packages/mailx-store-web/web-service.js.map +1 -0
  172. package/packages/mailx-store-web/web-service.ts +616 -0
  173. package/packages/mailx-store-web/web-settings.d.ts.map +1 -0
  174. package/packages/mailx-store-web/web-settings.js.map +1 -0
  175. package/packages/mailx-store-web/web-settings.ts +522 -0
  176. package/packages/mailx-store-web/worker-entry.d.ts.map +1 -0
  177. package/packages/mailx-store-web/worker-entry.js.map +1 -0
  178. package/packages/mailx-store-web/worker-entry.ts +215 -0
  179. package/packages/mailx-store-web/worker-tcp-transport.d.ts.map +1 -0
  180. package/packages/mailx-store-web/worker-tcp-transport.js.map +1 -0
  181. package/packages/mailx-store-web/worker-tcp-transport.ts +101 -0
  182. package/packages/mailx-types/.gitattributes +10 -0
  183. package/packages/mailx-types/index.d.ts.map +1 -0
  184. package/packages/mailx-types/index.js.map +1 -0
  185. package/packages/mailx-types/index.ts +498 -0
  186. package/packages/mailx-types/package.json +1 -1
  187. package/packages/mailx-types/tsconfig.json +9 -0
  188. package/tsconfig.base.json +2 -1
  189. package/tsconfig.json +9 -0
  190. package/build-apk.cmd +0 -3
  191. package/npmg.bat +0 -6
  192. package/packages/mailx-imap/index.d.ts +0 -442
  193. package/packages/mailx-imap/index.js +0 -3684
  194. package/packages/mailx-imap/package.json +0 -25
  195. package/packages/mailx-imap/providers/gmail-api.d.ts +0 -8
  196. package/packages/mailx-imap/providers/gmail-api.js +0 -8
  197. package/packages/mailx-imap/providers/types.d.ts +0 -9
  198. package/packages/mailx-imap/providers/types.js +0 -9
  199. package/packages/mailx-imap/tsconfig.tsbuildinfo +0 -1
  200. package/rebuild.cmd +0 -23
  201. package/tdview.cmd +0 -2
  202. package/temp.ps1 +0 -10
  203. package/test-smtp-direct.mjs +0 -4
  204. package/unbash.cmd +0 -55
  205. package/unwedge.cmd +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,429 @@
1
+ /**
2
+ * @bobfrankston/mailx-server
3
+ * Express server: serves client, mounts API, manages WebSocket push.
4
+ */
5
+
6
+ import express from "express";
7
+ import { WebSocketServer, WebSocket } from "ws";
8
+ import * as path from "node:path";
9
+ import * as fs from "node:fs";
10
+ import { MailxDB } from "@bobfrankston/mailx-store";
11
+ import { ImapManager } from "@bobfrankston/mailx-imap";
12
+ import { createApiRouter } from "@bobfrankston/mailx-api";
13
+ import { loadSettings, loadAccountsAsync, getConfigDir, getStorePath, getSharedDir, getStorageInfo } from "@bobfrankston/mailx-settings";
14
+ import type { WsEvent } from "@bobfrankston/mailx-types";
15
+ import { ports } from "@bobfrankston/miscinfo";
16
+ import { createServer } from "node:http";
17
+
18
+ const PORT = ports.mailx;
19
+
20
+ // ── File logging ──
21
+ const logDir = path.join(process.env.USERPROFILE || process.env.HOME || ".", ".mailx", "logs");
22
+ fs.mkdirSync(logDir, { recursive: true });
23
+ // Rotate: delete logs older than 7 days
24
+ try {
25
+ for (const f of fs.readdirSync(logDir).filter(f => f.startsWith("mailx-") && f.endsWith(".log"))) {
26
+ const stat = fs.statSync(path.join(logDir, f));
27
+ if (Date.now() - stat.mtimeMs > 7 * 86400000) fs.unlinkSync(path.join(logDir, f));
28
+ }
29
+ } catch { /* ignore cleanup errors */ }
30
+ const logDate = new Date().toISOString().slice(0, 10);
31
+ const logPath = path.join(logDir, `mailx-${logDate}.log`);
32
+ const logStream = fs.createWriteStream(logPath, { flags: "a" });
33
+ const origLog = console.log;
34
+ const origErr = console.error;
35
+ function logTs(): string { return new Date().toLocaleString("se", { hour12: false }); }
36
+ console.log = (...args: any[]) => {
37
+ const msg = `${logTs()} ${args.join(" ")}`;
38
+ origLog(msg);
39
+ logStream.write(msg + "\n");
40
+ };
41
+ console.error = (...args: any[]) => {
42
+ const msg = `${logTs()} ERROR ${args.join(" ")}`;
43
+ origErr(msg);
44
+ logStream.write(msg + "\n");
45
+ };
46
+ // Read version from root package.json (the published version)
47
+ const rootPkg = JSON.parse(fs.readFileSync(path.join(import.meta.dirname, "..", "..", "package.json"), "utf-8"));
48
+ const SERVER_VERSION = rootPkg.version;
49
+
50
+ // ── Initialize ──
51
+ // No initLocalConfig() here — config is created when user adds an account (initCloudConfig).
52
+ // On fresh install, loadSettings() returns defaults and the setup form handles configuration.
53
+
54
+ let settings = loadSettings();
55
+ if (settings.accounts.length === 0) {
56
+ // Try cloud API fallback (Google Drive, OneDrive) if filesystem mount not available
57
+ const cloudAccounts = await loadAccountsAsync();
58
+ if (cloudAccounts.length > 0) {
59
+ settings = { ...settings, accounts: cloudAccounts };
60
+ console.log(` Loaded ${cloudAccounts.length} account(s) from cloud API`);
61
+ } else {
62
+ console.log(" No accounts configured. Open http://127.0.0.1:9333 to add your email account.");
63
+ }
64
+ }
65
+ const dbDir = getConfigDir();
66
+ const db = new MailxDB(dbDir);
67
+ import { NodeTransport } from "@bobfrankston/iflow-node";
68
+ const imapManager = new ImapManager(db, () => new NodeTransport());
69
+
70
+ // ── Express App ──
71
+
72
+ const app = express();
73
+ app.use(express.json({ limit: "Infinity" }));
74
+
75
+ // Optional token gate — required whenever the server binds to anything other
76
+ // than a loopback address. Set via `MAILX_SERVER_TOKEN=<secret>` (or the
77
+ // shorter `MAILX_TOKEN`). When the server is loopback-only (the default), the
78
+ // gate is a no-op since nothing outside the machine can reach it. When bound
79
+ // externally (`MAILX_SERVER_HOST=0.0.0.0` or `--external`), connections must
80
+ // present the token in either `?t=<token>` or the `x-mailx-token` header. No
81
+ // token configured + external bind → server refuses to start (safer than
82
+ // serving open).
83
+ const SERVER_TOKEN = process.env.MAILX_SERVER_TOKEN || process.env.MAILX_TOKEN || "";
84
+ const SERVER_HOST = process.env.MAILX_SERVER_HOST || "";
85
+ const IS_EXTERNAL_BIND = SERVER_HOST && SERVER_HOST !== "127.0.0.1" && SERVER_HOST !== "localhost" && SERVER_HOST !== "::1";
86
+ if (IS_EXTERNAL_BIND && !SERVER_TOKEN) {
87
+ console.error("[server] Refusing to bind externally without MAILX_SERVER_TOKEN. Set the env var or drop the external host.");
88
+ process.exit(2);
89
+ }
90
+ app.use((req, res, next) => {
91
+ if (!IS_EXTERNAL_BIND) return next();
92
+ // Allow the bare static file fetch so the login page can render; every
93
+ // /api/* path requires the token.
94
+ if (!req.path.startsWith("/api/")) return next();
95
+ const provided = (req.query.t as string) || req.header("x-mailx-token") || "";
96
+ if (provided !== SERVER_TOKEN) {
97
+ res.status(401).json({ error: "missing or invalid token" });
98
+ return;
99
+ }
100
+ next();
101
+ });
102
+
103
+ // Request logging
104
+ app.use((req, res, next) => {
105
+ const start = Date.now();
106
+ res.on("finish", () => {
107
+ const ms = Date.now() - start;
108
+ // Skip noisy polling endpoints
109
+ if (req.path.endsWith("/sync/pending")) return;
110
+ console.log(` ${req.method} ${req.path} ${res.statusCode} ${ms}ms`);
111
+ });
112
+ next();
113
+ });
114
+
115
+ // Serve client static files
116
+ const clientDir = path.join(import.meta.dirname, "..", "..", "client");
117
+ const rootDir = path.join(import.meta.dirname, "..", "..");
118
+ app.use(express.static(clientDir, { etag: false, lastModified: false, maxAge: 0 }));
119
+ app.use("/node_modules", express.static(path.join(rootDir, "node_modules"), { etag: false, lastModified: false, maxAge: 0 }));
120
+
121
+ // Mount API
122
+ const apiRouter = createApiRouter(db, imapManager);
123
+ app.use("/api", apiRouter);
124
+
125
+ app.get("/api/version", (req, res) => {
126
+ const storage = getStorageInfo();
127
+ const imapAccounts = imapManager.getAccountCount();
128
+ const dbAccounts = db.getAccounts().length;
129
+ // Warn if DB has accounts but IMAP has none — stale DB, settings missing
130
+ const settingsError = (dbAccounts > 0 && imapAccounts === 0)
131
+ ? "No accounts loaded from settings — showing stale data. Check accounts.jsonc on your cloud drive."
132
+ : undefined;
133
+ res.json({ version: SERVER_VERSION, theme: settings.ui?.theme || "system", storage, imapAccounts, hasAccounts: imapAccounts > 0 || dbAccounts > 0, settingsError });
134
+ });
135
+
136
+ app.all("/info", (req, res) => {
137
+ res.json({ version: SERVER_VERSION, uptime: Math.round(process.uptime()), port: PORT, imap: imapManager.useNativeClient ? "native" : "imapflow" });
138
+ });
139
+
140
+ app.get("/status", (req, res) => {
141
+ const accounts = db.getAccounts();
142
+ const pendingSync = db.getTotalPendingSyncCount();
143
+ const uptime = process.uptime();
144
+ const mem = process.memoryUsage();
145
+
146
+ const accountInfo = accounts.map((a: any) => {
147
+ const folders = db.getFolders(a.id);
148
+ const inbox = folders.find((f: any) => f.specialUse === "inbox");
149
+ return {
150
+ id: a.id, name: a.name, folders: folders.length,
151
+ inboxTotal: inbox?.totalCount || 0,
152
+ inboxUnread: inbox?.unreadCount || 0,
153
+ lastSync: a.lastSync ? new Date(a.lastSync).toLocaleString() : "never",
154
+ };
155
+ });
156
+
157
+ res.type("html").send(`<!DOCTYPE html>
158
+ <html><head><meta charset="UTF-8"><title>mailx status</title>
159
+ <meta http-equiv="refresh" content="10">
160
+ <style>body{font-family:system-ui;padding:2rem;max-width:600px;color:#cdd6f4;background:#1e1e2e}
161
+ table{border-collapse:collapse;width:100%}td,th{text-align:left;padding:4px 12px;border-bottom:1px solid #333}
162
+ h1{font-size:1.2rem}h2{font-size:1rem;margin-top:1.5rem}.ok{color:#a6e3a1}.warn{color:#f9e2af}
163
+ a{color:#89b4fa}</style></head>
164
+ <body>
165
+ <h1>mailx status</h1>
166
+ <p>mailx v${SERVER_VERSION}</p>
167
+ <p>Uptime: ${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m | Memory: ${Math.round(mem.rss / 1048576)} MB</p>
168
+ <p>Pending sync: <span class="${pendingSync > 0 ? "warn" : "ok"}">${pendingSync}</span></p>
169
+ <h2>Accounts</h2>
170
+ <table><tr><th>Account</th><th>Folders</th><th>Inbox</th><th>Unread</th><th>Last Sync</th></tr>
171
+ ${accountInfo.map((a: any) => `<tr><td>${a.name}</td><td>${a.folders}</td><td>${a.inboxTotal}</td><td>${a.inboxUnread}</td><td>${a.lastSync}</td></tr>`).join("")}
172
+ </table>
173
+ <p style="margin-top:2rem;font-size:0.8rem"><a href="/">Open mailx</a> | Auto-refreshes every 10s</p>
174
+ </body></html>`);
175
+ });
176
+
177
+ // Graceful exit — close IMAP, DB, HTTP then exit
178
+ app.all("/api/exit", (req, res) => {
179
+ res.json({ ok: true });
180
+ setTimeout(() => shutdown(), 100);
181
+ });
182
+
183
+ // Restart server + reload clients
184
+ app.post("/api/restart", (req, res) => {
185
+ res.json({ ok: true });
186
+ broadcast({ type: "reload" });
187
+ setTimeout(async () => {
188
+ console.log(" Restart requested via API");
189
+ await shutdown();
190
+ }, 500);
191
+ });
192
+
193
+ // Rebuild: wipe DB + message store, keep accounts/settings, restart
194
+ app.post("/api/rebuild", (req, res) => {
195
+ res.json({ ok: true });
196
+ broadcast({ type: "reload" });
197
+ setTimeout(async () => {
198
+ console.log(" Rebuild requested — wiping DB and message store...");
199
+ imapManager.stopPeriodicSync();
200
+ try { await imapManager.shutdown(); } catch { /* proceed */ }
201
+ db.close();
202
+
203
+ // Remove DB files
204
+ const dbDir = getConfigDir();
205
+ for (const f of ["mailx.db", "mailx.db-wal", "mailx.db-shm"]) {
206
+ const p = path.join(dbDir, f);
207
+ if (fs.existsSync(p)) { fs.unlinkSync(p); console.log(` Deleted ${f}`); }
208
+ }
209
+
210
+ // Remove message store
211
+ const storePath = getStorePath();
212
+ if (fs.existsSync(storePath)) {
213
+ fs.rmSync(storePath, { recursive: true });
214
+ console.log(` Deleted ${storePath}`);
215
+ }
216
+
217
+ console.log(" Rebuild complete — restarting...");
218
+ server?.close();
219
+ process.exit(0);
220
+ }, 500);
221
+ });
222
+
223
+ // SPA fallback
224
+ app.get("*", (req, res) => {
225
+ if (!req.path.startsWith("/api"))
226
+ res.sendFile(path.join(clientDir, "index.html"));
227
+ });
228
+
229
+ // JSON error handler — all errors return JSON, never HTML
230
+ app.use((err: any, _req: any, res: any, _next: any) => {
231
+ console.error(`ERROR ${err.message}`);
232
+ const status = err.status || err.statusCode || 500;
233
+ res.status(status).json({ error: err.message || "Internal server error" });
234
+ });
235
+
236
+ // ── HTTP Server ──
237
+
238
+ let server: ReturnType<typeof createServer>;
239
+ let wss: WebSocketServer;
240
+
241
+ const clients = new Set<WebSocket>();
242
+
243
+ function wireWebSocket(): void {
244
+ wss.on("connection", (ws) => {
245
+ clients.add(ws);
246
+ (ws as any).__alive = true;
247
+ const connected: WsEvent = { type: "connected" };
248
+ ws.send(JSON.stringify(connected));
249
+
250
+ ws.on("pong", () => { (ws as any).__alive = true; });
251
+ ws.on("close", () => clients.delete(ws));
252
+ });
253
+
254
+ // Heartbeat — detect dead connections, prevent CLOSE_WAIT zombie accumulation
255
+ setInterval(() => {
256
+ for (const ws of clients) {
257
+ if ((ws as any).__alive === false) {
258
+ clients.delete(ws);
259
+ ws.terminate();
260
+ continue;
261
+ }
262
+ (ws as any).__alive = false;
263
+ ws.ping();
264
+ }
265
+ }, 30000);
266
+ }
267
+
268
+ function broadcast(event: WsEvent): void {
269
+ const data = JSON.stringify(event);
270
+ for (const ws of clients) {
271
+ if (ws.readyState === WebSocket.OPEN)
272
+ ws.send(data);
273
+ }
274
+ }
275
+
276
+ // Wire IMAP events to WebSocket broadcasts
277
+ imapManager.on("syncProgress", (accountId: string, phase: string, progress: number) => {
278
+ broadcast({ type: "syncProgress", accountId, phase, progress });
279
+ });
280
+
281
+ imapManager.on("folderCountsChanged", (accountId: string, counts: Record<number, { total: number; unread: number }>) => {
282
+ broadcast({ type: "folderCountsChanged", accountId, counts });
283
+ });
284
+
285
+ imapManager.on("folderSynced", (accountId: string, folderId: number, syncedAt: number) => {
286
+ broadcast({ type: "folderSynced", accountId, entries: [{ folderId, syncedAt }] });
287
+ });
288
+
289
+ imapManager.on("syncError", (accountId: string, error: string) => {
290
+ broadcast({ type: "error", message: `${accountId}: ${error}` });
291
+ });
292
+
293
+ imapManager.on("accountError", (accountId: string, error: string, hint: string, isOAuth: boolean) => {
294
+ broadcast({ type: "accountError", accountId, error, hint, isOAuth });
295
+ });
296
+
297
+ // ── Startup ──
298
+
299
+ async function start(): Promise<void> {
300
+ console.log("mailx server starting...");
301
+
302
+ // Start HTTP server FIRST so UI is always reachable (even during IMAP startup)
303
+ const externalAccess = process.argv.includes("--external");
304
+ const hostname = externalAccess ? "0.0.0.0" : "127.0.0.1";
305
+
306
+ // Retry listen with backoff — Windows CLOSE_WAIT zombies can hold the port for minutes after a crash
307
+ for (let attempt = 0; attempt < 30; attempt++) {
308
+ server = createServer(app);
309
+ // Prevent CLOSE_WAIT accumulation: short keepAlive timeout + connection close headers
310
+ server.keepAliveTimeout = 5000; // close idle keep-alive connections after 5s
311
+ server.headersTimeout = 10000; // kill connections with no headers after 10s
312
+ // Track connections for clean shutdown (prevents CLOSE_WAIT zombies on Windows)
313
+ server.on("connection", (conn) => {
314
+ openConnections.add(conn);
315
+ conn.on("close", () => openConnections.delete(conn));
316
+ });
317
+ // Suppress EADDRINUSE from bubbling to uncaughtException — we handle it here
318
+ server.on("error", () => {}); // will be replaced by listen handler below
319
+ wss = new WebSocketServer({ server });
320
+ wireWebSocket();
321
+
322
+ const listenResult = await new Promise<"ok" | string>((resolve) => {
323
+ server.removeAllListeners("error");
324
+ server.once("error", (e: any) => { resolve(e.code || e.message); });
325
+ server.listen({ port: PORT, host: hostname, exclusive: false }, () => {
326
+ server.removeAllListeners("error");
327
+ resolve("ok");
328
+ });
329
+ });
330
+ if (listenResult === "ok") break;
331
+ if (listenResult === "EADDRINUSE" && attempt < 29) {
332
+ const wait = Math.min(2000 + attempt * 1000, 10000);
333
+ console.log(` Port ${PORT} in use (CLOSE_WAIT zombies?) — retry ${attempt + 1}/30 in ${wait / 1000}s...`);
334
+ server.close();
335
+ await new Promise(r => setTimeout(r, wait));
336
+ } else {
337
+ throw new Error(`Cannot bind port ${PORT}: ${listenResult}`);
338
+ }
339
+ }
340
+ console.log(`mailx server running on http://${hostname}:${PORT}`);
341
+
342
+ // Seed contacts (fast — skips existing)
343
+ const seeded = db.seedContactsFromMessages();
344
+ if (seeded > 0) console.log(` Seeded ${seeded} contacts`);
345
+
346
+ // Search index — rebuild in background (non-blocking)
347
+ setTimeout(() => {
348
+ let ftsCount = 0;
349
+ try { ftsCount = ((db as any).db.prepare("SELECT COUNT(*) as cnt FROM messages_fts").get() as any)?.cnt || 0; } catch { /* */ }
350
+ if (ftsCount === 0) {
351
+ const indexed = db.rebuildSearchIndex();
352
+ if (indexed > 0) console.log(` Search index: ${indexed} messages`);
353
+ }
354
+ }, 5000);
355
+
356
+ // Add configured accounts
357
+ for (const account of settings.accounts) {
358
+ if (!account.enabled && !(account as any).syncContacts) continue;
359
+ try {
360
+ await imapManager.addAccount(account);
361
+ console.log(` Account added: ${account.name} (${account.id})${!account.enabled ? " [contacts only]" : ""}`);
362
+ } catch (e: any) {
363
+ console.error(` Failed to add account ${account.id}: ${e.message}`);
364
+ }
365
+ }
366
+
367
+ // Initial sync, then start IDLE watchers
368
+ if (settings.accounts.some(a => a.enabled)) {
369
+ console.log(" Starting initial sync...");
370
+ imapManager.syncAll().then(async () => {
371
+ console.log(" Initial sync complete");
372
+ // Start IDLE watchers for instant new-mail notifications
373
+ await imapManager.startWatching();
374
+ // Sync Google Contacts for OAuth accounts
375
+ imapManager.syncAllContacts().catch(e =>
376
+ console.error(` Google Contacts sync error: ${e.message}`)
377
+ );
378
+ }).catch(e => {
379
+ console.error(` Initial sync error: ${e.message}`);
380
+ });
381
+ }
382
+
383
+ // Periodic sync as fallback (IDLE handles most updates)
384
+ imapManager.startPeriodicSync(settings.sync.intervalMinutes);
385
+
386
+ // Outbox worker — processes queued outgoing messages
387
+ imapManager.startOutboxWorker();
388
+ }
389
+
390
+ // ── Graceful Shutdown ──
391
+
392
+ /** Track all open connections so we can destroy them on shutdown (prevents CLOSE_WAIT zombies) */
393
+ const openConnections = new Set<import("node:net").Socket>();
394
+
395
+ async function shutdown(): Promise<void> {
396
+ console.log("\nShutting down...");
397
+ const forceExit = setTimeout(() => { console.log("Force exit"); process.exit(1); }, 3000);
398
+ imapManager.stopPeriodicSync();
399
+ try { await imapManager.shutdown(); } catch { /* proceed */ }
400
+ db.close();
401
+ // Destroy all open connections immediately — prevents CLOSE_WAIT zombies on Windows
402
+ for (const conn of openConnections) {
403
+ conn.destroy();
404
+ }
405
+ openConnections.clear();
406
+ server?.close();
407
+ clearTimeout(forceExit);
408
+ process.exit(0);
409
+ }
410
+
411
+ process.on("SIGINT", shutdown);
412
+ process.on("SIGTERM", shutdown);
413
+ process.on("unhandledRejection", (err: any) => {
414
+ console.error("Unhandled rejection:", err?.message || err);
415
+ });
416
+ process.on("uncaughtException", (err) => {
417
+ console.error("FATAL uncaught exception:", err.message);
418
+ console.error(err.stack);
419
+ // Other exceptions: stay alive, let node --watch handle file-change restarts
420
+ });
421
+ process.on("exit", (code) => {
422
+ console.log(`Process exiting with code ${code}`);
423
+ });
424
+
425
+ // ── Entry Point ──
426
+
427
+ await start();
428
+
429
+ export { app, start };
@@ -11,7 +11,7 @@
11
11
  "dependencies": {
12
12
  "@bobfrankston/mailx-types": "file:../mailx-types",
13
13
  "@bobfrankston/mailx-store": "file:../mailx-store",
14
- "@bobfrankston/mailx-imap": "file:../mailx-imap",
14
+ "@bobfrankston/mailx-imap": "file:../../../packages/mailx-imap",
15
15
  "@bobfrankston/mailx-api": "file:../mailx-api",
16
16
  "@bobfrankston/mailx-settings": "file:../mailx-settings",
17
17
  "express": "^4.21.0",
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": ".",
5
+ "rootDir": "."
6
+ },
7
+ "include": ["*.ts"],
8
+ "exclude": ["node_modules", "prev", "cruft", "tests"]
9
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-sync.d.ts","sourceRoot":"","sources":["google-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-sync.js","sourceRoot":"","sources":["google-sync.ts"],"names":[],"mappings":"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"}