@bobfrankston/rmfmail 1.0.467

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 (330) hide show
  1. package/README.md +429 -0
  2. package/bin/build-icon-ico.js +283 -0
  3. package/bin/lean-accounts.js +172 -0
  4. package/bin/mailx.js +1580 -0
  5. package/bin/mailx.js.map +1 -0
  6. package/bin/mailx.ts +1549 -0
  7. package/bin/postinstall.js +39 -0
  8. package/bin/postinstall.js.map +1 -0
  9. package/bin/postinstall.ts +41 -0
  10. package/bin/tsconfig.json +10 -0
  11. package/client/.gitattributes +10 -0
  12. package/client/.msger-window.json +1 -0
  13. package/client/android.html +226 -0
  14. package/client/app.js +3400 -0
  15. package/client/app.js.map +1 -0
  16. package/client/app.ts +3190 -0
  17. package/client/components/address-book.js +199 -0
  18. package/client/components/address-book.js.map +1 -0
  19. package/client/components/address-book.ts +204 -0
  20. package/client/components/alarms.js +299 -0
  21. package/client/components/alarms.js.map +1 -0
  22. package/client/components/alarms.ts +276 -0
  23. package/client/components/calendar-sidebar.js +508 -0
  24. package/client/components/calendar-sidebar.js.map +1 -0
  25. package/client/components/calendar-sidebar.ts +474 -0
  26. package/client/components/calendar.js +217 -0
  27. package/client/components/calendar.js.map +1 -0
  28. package/client/components/calendar.ts +211 -0
  29. package/client/components/context-menu.js +80 -0
  30. package/client/components/context-menu.js.map +1 -0
  31. package/client/components/context-menu.ts +95 -0
  32. package/client/components/folder-picker.js +119 -0
  33. package/client/components/folder-picker.js.map +1 -0
  34. package/client/components/folder-picker.ts +127 -0
  35. package/client/components/folder-tree.js +1093 -0
  36. package/client/components/folder-tree.js.map +1 -0
  37. package/client/components/folder-tree.ts +1069 -0
  38. package/client/components/message-list.js +1140 -0
  39. package/client/components/message-list.js.map +1 -0
  40. package/client/components/message-list.ts +1129 -0
  41. package/client/components/message-viewer.js +1291 -0
  42. package/client/components/message-viewer.js.map +1 -0
  43. package/client/components/message-viewer.ts +1257 -0
  44. package/client/components/outbox-view.js +104 -0
  45. package/client/components/outbox-view.js.map +1 -0
  46. package/client/components/outbox-view.ts +102 -0
  47. package/client/components/tasks.js +261 -0
  48. package/client/components/tasks.js.map +1 -0
  49. package/client/components/tasks.ts +234 -0
  50. package/client/compose/compose.css +560 -0
  51. package/client/compose/compose.html +52 -0
  52. package/client/compose/compose.js +1289 -0
  53. package/client/compose/compose.js.map +1 -0
  54. package/client/compose/compose.ts +1231 -0
  55. package/client/compose/editor.js +616 -0
  56. package/client/compose/editor.js.map +1 -0
  57. package/client/compose/editor.ts +599 -0
  58. package/client/compose/ghost-text.js +122 -0
  59. package/client/compose/ghost-text.js.map +1 -0
  60. package/client/compose/ghost-text.ts +140 -0
  61. package/client/favicon.svg +11 -0
  62. package/client/icon.ico +0 -0
  63. package/client/icon.png +0 -0
  64. package/client/index.html +230 -0
  65. package/client/lib/android-bootstrap.js +9 -0
  66. package/client/lib/android-bootstrap.js.map +1 -0
  67. package/client/lib/android-bootstrap.ts +9 -0
  68. package/client/lib/api-client.js +378 -0
  69. package/client/lib/api-client.js.map +1 -0
  70. package/client/lib/api-client.ts +439 -0
  71. package/client/lib/local-service.js +603 -0
  72. package/client/lib/local-service.js.map +1 -0
  73. package/client/lib/local-service.ts +646 -0
  74. package/client/lib/local-store.js +214 -0
  75. package/client/lib/local-store.js.map +1 -0
  76. package/client/lib/local-store.ts +283 -0
  77. package/client/lib/mailxapi.js +304 -0
  78. package/client/lib/message-state.js +132 -0
  79. package/client/lib/message-state.js.map +1 -0
  80. package/client/lib/message-state.ts +160 -0
  81. package/client/package.json +16 -0
  82. package/client/styles/components.css +2049 -0
  83. package/client/styles/layout.css +332 -0
  84. package/client/styles/variables.css +85 -0
  85. package/client/tsconfig.json +19 -0
  86. package/package.json +124 -0
  87. package/packages/mailx-api/.gitattributes +10 -0
  88. package/packages/mailx-api/index.d.ts +10 -0
  89. package/packages/mailx-api/index.d.ts.map +1 -0
  90. package/packages/mailx-api/index.js +322 -0
  91. package/packages/mailx-api/index.js.map +1 -0
  92. package/packages/mailx-api/index.ts +283 -0
  93. package/packages/mailx-api/package.json +27 -0
  94. package/packages/mailx-api/tsconfig.json +9 -0
  95. package/packages/mailx-api/tsconfig.tsbuildinfo +1 -0
  96. package/packages/mailx-compose/.gitattributes +10 -0
  97. package/packages/mailx-compose/index.d.ts +21 -0
  98. package/packages/mailx-compose/index.d.ts.map +1 -0
  99. package/packages/mailx-compose/index.js +61 -0
  100. package/packages/mailx-compose/index.js.map +1 -0
  101. package/packages/mailx-compose/index.ts +85 -0
  102. package/packages/mailx-compose/package.json +18 -0
  103. package/packages/mailx-compose/tsconfig.json +9 -0
  104. package/packages/mailx-core/index.d.ts +139 -0
  105. package/packages/mailx-core/index.d.ts.map +1 -0
  106. package/packages/mailx-core/index.js +403 -0
  107. package/packages/mailx-core/index.js.map +1 -0
  108. package/packages/mailx-core/index.ts +424 -0
  109. package/packages/mailx-core/ipc.d.ts +13 -0
  110. package/packages/mailx-core/ipc.d.ts.map +1 -0
  111. package/packages/mailx-core/ipc.js +56 -0
  112. package/packages/mailx-core/ipc.js.map +1 -0
  113. package/packages/mailx-core/ipc.ts +62 -0
  114. package/packages/mailx-core/package.json +18 -0
  115. package/packages/mailx-core/tsconfig.json +9 -0
  116. package/packages/mailx-host/.gitattributes +10 -0
  117. package/packages/mailx-host/index.d.ts +21 -0
  118. package/packages/mailx-host/index.d.ts.map +1 -0
  119. package/packages/mailx-host/index.js +29 -0
  120. package/packages/mailx-host/index.js.map +1 -0
  121. package/packages/mailx-host/index.ts +38 -0
  122. package/packages/mailx-host/package.json +23 -0
  123. package/packages/mailx-host/tsconfig.json +9 -0
  124. package/packages/mailx-host/types-shim.d.ts +14 -0
  125. package/packages/mailx-imap/.gitattributes +10 -0
  126. package/packages/mailx-imap/index.d.ts +442 -0
  127. package/packages/mailx-imap/index.d.ts.map +1 -0
  128. package/packages/mailx-imap/index.js +3684 -0
  129. package/packages/mailx-imap/index.js.map +1 -0
  130. package/packages/mailx-imap/index.ts +3652 -0
  131. package/packages/mailx-imap/package-lock.json +131 -0
  132. package/packages/mailx-imap/package.json +28 -0
  133. package/packages/mailx-imap/providers/gmail-api.d.ts +8 -0
  134. package/packages/mailx-imap/providers/gmail-api.d.ts.map +1 -0
  135. package/packages/mailx-imap/providers/gmail-api.js +8 -0
  136. package/packages/mailx-imap/providers/gmail-api.js.map +1 -0
  137. package/packages/mailx-imap/providers/gmail-api.ts +8 -0
  138. package/packages/mailx-imap/providers/outlook-api.ts +7 -0
  139. package/packages/mailx-imap/providers/types.d.ts +9 -0
  140. package/packages/mailx-imap/providers/types.d.ts.map +1 -0
  141. package/packages/mailx-imap/providers/types.js +9 -0
  142. package/packages/mailx-imap/providers/types.js.map +1 -0
  143. package/packages/mailx-imap/providers/types.ts +9 -0
  144. package/packages/mailx-imap/tsconfig.json +9 -0
  145. package/packages/mailx-imap/tsconfig.tsbuildinfo +1 -0
  146. package/packages/mailx-send/.gitattributes +10 -0
  147. package/packages/mailx-send/README.md +217 -0
  148. package/packages/mailx-send/cli-queue.d.ts +11 -0
  149. package/packages/mailx-send/cli-queue.d.ts.map +1 -0
  150. package/packages/mailx-send/cli-queue.js +59 -0
  151. package/packages/mailx-send/cli-queue.js.map +1 -0
  152. package/packages/mailx-send/cli-queue.ts +62 -0
  153. package/packages/mailx-send/cli-send.d.ts +17 -0
  154. package/packages/mailx-send/cli-send.d.ts.map +1 -0
  155. package/packages/mailx-send/cli-send.js +75 -0
  156. package/packages/mailx-send/cli-send.js.map +1 -0
  157. package/packages/mailx-send/cli-send.ts +83 -0
  158. package/packages/mailx-send/cli.d.ts +22 -0
  159. package/packages/mailx-send/cli.d.ts.map +1 -0
  160. package/packages/mailx-send/cli.js +115 -0
  161. package/packages/mailx-send/cli.js.map +1 -0
  162. package/packages/mailx-send/cli.ts +126 -0
  163. package/packages/mailx-send/index.d.ts +77 -0
  164. package/packages/mailx-send/index.d.ts.map +1 -0
  165. package/packages/mailx-send/index.js +264 -0
  166. package/packages/mailx-send/index.js.map +1 -0
  167. package/packages/mailx-send/index.ts +333 -0
  168. package/packages/mailx-send/mailsend/README.md +133 -0
  169. package/packages/mailx-send/mailsend/cli.d.ts +12 -0
  170. package/packages/mailx-send/mailsend/cli.d.ts.map +1 -0
  171. package/packages/mailx-send/mailsend/cli.js +70 -0
  172. package/packages/mailx-send/mailsend/cli.js.map +1 -0
  173. package/packages/mailx-send/mailsend/cli.ts +81 -0
  174. package/packages/mailx-send/mailsend/index.d.ts +77 -0
  175. package/packages/mailx-send/mailsend/index.d.ts.map +1 -0
  176. package/packages/mailx-send/mailsend/index.js +264 -0
  177. package/packages/mailx-send/mailsend/index.js.map +1 -0
  178. package/packages/mailx-send/mailsend/index.ts +333 -0
  179. package/packages/mailx-send/mailsend/package-lock.json +65 -0
  180. package/packages/mailx-send/mailsend/package.json +26 -0
  181. package/packages/mailx-send/mailsend/tsconfig.json +21 -0
  182. package/packages/mailx-send/package-lock.json +65 -0
  183. package/packages/mailx-send/package.json +37 -0
  184. package/packages/mailx-send/tsconfig.json +21 -0
  185. package/packages/mailx-server/.gitattributes +10 -0
  186. package/packages/mailx-server/index.d.ts +8 -0
  187. package/packages/mailx-server/index.d.ts.map +1 -0
  188. package/packages/mailx-server/index.js +397 -0
  189. package/packages/mailx-server/index.js.map +1 -0
  190. package/packages/mailx-server/index.ts +429 -0
  191. package/packages/mailx-server/package.json +28 -0
  192. package/packages/mailx-server/tsconfig.json +9 -0
  193. package/packages/mailx-server/tsconfig.tsbuildinfo +1 -0
  194. package/packages/mailx-service/google-sync.d.ts +96 -0
  195. package/packages/mailx-service/google-sync.d.ts.map +1 -0
  196. package/packages/mailx-service/google-sync.js +153 -0
  197. package/packages/mailx-service/google-sync.js.map +1 -0
  198. package/packages/mailx-service/google-sync.ts +238 -0
  199. package/packages/mailx-service/index.d.ts +366 -0
  200. package/packages/mailx-service/index.d.ts.map +1 -0
  201. package/packages/mailx-service/index.js +2589 -0
  202. package/packages/mailx-service/index.js.map +1 -0
  203. package/packages/mailx-service/index.ts +2512 -0
  204. package/packages/mailx-service/jsonrpc.d.ts +25 -0
  205. package/packages/mailx-service/jsonrpc.d.ts.map +1 -0
  206. package/packages/mailx-service/jsonrpc.js +238 -0
  207. package/packages/mailx-service/jsonrpc.js.map +1 -0
  208. package/packages/mailx-service/jsonrpc.ts +268 -0
  209. package/packages/mailx-service/package.json +22 -0
  210. package/packages/mailx-service/tsconfig.json +9 -0
  211. package/packages/mailx-settings/.gitattributes +10 -0
  212. package/packages/mailx-settings/cloud.d.ts +47 -0
  213. package/packages/mailx-settings/cloud.d.ts.map +1 -0
  214. package/packages/mailx-settings/cloud.js +408 -0
  215. package/packages/mailx-settings/cloud.js.map +1 -0
  216. package/packages/mailx-settings/cloud.ts +393 -0
  217. package/packages/mailx-settings/index.d.ts +140 -0
  218. package/packages/mailx-settings/index.d.ts.map +1 -0
  219. package/packages/mailx-settings/index.js +872 -0
  220. package/packages/mailx-settings/index.js.map +1 -0
  221. package/packages/mailx-settings/index.ts +908 -0
  222. package/packages/mailx-settings/package.json +20 -0
  223. package/packages/mailx-settings/tsconfig.json +9 -0
  224. package/packages/mailx-settings/tsconfig.tsbuildinfo +1 -0
  225. package/packages/mailx-store/.gitattributes +10 -0
  226. package/packages/mailx-store/db.d.ts +346 -0
  227. package/packages/mailx-store/db.d.ts.map +1 -0
  228. package/packages/mailx-store/db.js +1796 -0
  229. package/packages/mailx-store/db.js.map +1 -0
  230. package/packages/mailx-store/db.ts +2007 -0
  231. package/packages/mailx-store/file-store.d.ts +36 -0
  232. package/packages/mailx-store/file-store.d.ts.map +1 -0
  233. package/packages/mailx-store/file-store.js +80 -0
  234. package/packages/mailx-store/file-store.js.map +1 -0
  235. package/packages/mailx-store/file-store.ts +82 -0
  236. package/packages/mailx-store/index.d.ts +7 -0
  237. package/packages/mailx-store/index.d.ts.map +1 -0
  238. package/packages/mailx-store/index.js +7 -0
  239. package/packages/mailx-store/index.js.map +1 -0
  240. package/packages/mailx-store/index.ts +7 -0
  241. package/packages/mailx-store/package.json +19 -0
  242. package/packages/mailx-store/tsconfig.json +9 -0
  243. package/packages/mailx-store/tsconfig.tsbuildinfo +1 -0
  244. package/packages/mailx-store-web/android-bootstrap.d.ts +16 -0
  245. package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -0
  246. package/packages/mailx-store-web/android-bootstrap.js +1247 -0
  247. package/packages/mailx-store-web/android-bootstrap.js.map +1 -0
  248. package/packages/mailx-store-web/android-bootstrap.ts +1262 -0
  249. package/packages/mailx-store-web/db.d.ts +132 -0
  250. package/packages/mailx-store-web/db.d.ts.map +1 -0
  251. package/packages/mailx-store-web/db.js +642 -0
  252. package/packages/mailx-store-web/db.js.map +1 -0
  253. package/packages/mailx-store-web/db.ts +756 -0
  254. package/packages/mailx-store-web/gmail-api-web.d.ts +11 -0
  255. package/packages/mailx-store-web/gmail-api-web.d.ts.map +1 -0
  256. package/packages/mailx-store-web/gmail-api-web.js +11 -0
  257. package/packages/mailx-store-web/gmail-api-web.js.map +1 -0
  258. package/packages/mailx-store-web/gmail-api-web.ts +11 -0
  259. package/packages/mailx-store-web/imap-web-provider.d.ts +33 -0
  260. package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -0
  261. package/packages/mailx-store-web/imap-web-provider.js +140 -0
  262. package/packages/mailx-store-web/imap-web-provider.js.map +1 -0
  263. package/packages/mailx-store-web/imap-web-provider.ts +156 -0
  264. package/packages/mailx-store-web/index.d.ts +10 -0
  265. package/packages/mailx-store-web/index.d.ts.map +1 -0
  266. package/packages/mailx-store-web/index.js +10 -0
  267. package/packages/mailx-store-web/index.js.map +1 -0
  268. package/packages/mailx-store-web/index.ts +10 -0
  269. package/packages/mailx-store-web/main-thread-host.d.ts +15 -0
  270. package/packages/mailx-store-web/main-thread-host.d.ts.map +1 -0
  271. package/packages/mailx-store-web/main-thread-host.js +292 -0
  272. package/packages/mailx-store-web/main-thread-host.js.map +1 -0
  273. package/packages/mailx-store-web/main-thread-host.ts +322 -0
  274. package/packages/mailx-store-web/package.json +23 -0
  275. package/packages/mailx-store-web/provider-types.d.ts +7 -0
  276. package/packages/mailx-store-web/provider-types.d.ts.map +1 -0
  277. package/packages/mailx-store-web/provider-types.js +7 -0
  278. package/packages/mailx-store-web/provider-types.js.map +1 -0
  279. package/packages/mailx-store-web/provider-types.ts +7 -0
  280. package/packages/mailx-store-web/sql-wasm-esm.js +10 -0
  281. package/packages/mailx-store-web/sql.js.d.ts +29 -0
  282. package/packages/mailx-store-web/sync-manager.d.ts +68 -0
  283. package/packages/mailx-store-web/sync-manager.d.ts.map +1 -0
  284. package/packages/mailx-store-web/sync-manager.js +506 -0
  285. package/packages/mailx-store-web/sync-manager.js.map +1 -0
  286. package/packages/mailx-store-web/sync-manager.ts +508 -0
  287. package/packages/mailx-store-web/tsconfig.json +10 -0
  288. package/packages/mailx-store-web/web-jsonrpc.d.ts +20 -0
  289. package/packages/mailx-store-web/web-jsonrpc.d.ts.map +1 -0
  290. package/packages/mailx-store-web/web-jsonrpc.js +102 -0
  291. package/packages/mailx-store-web/web-jsonrpc.js.map +1 -0
  292. package/packages/mailx-store-web/web-jsonrpc.ts +116 -0
  293. package/packages/mailx-store-web/web-message-store.d.ts +16 -0
  294. package/packages/mailx-store-web/web-message-store.d.ts.map +1 -0
  295. package/packages/mailx-store-web/web-message-store.js +89 -0
  296. package/packages/mailx-store-web/web-message-store.js.map +1 -0
  297. package/packages/mailx-store-web/web-message-store.ts +97 -0
  298. package/packages/mailx-store-web/web-service.d.ts +111 -0
  299. package/packages/mailx-store-web/web-service.d.ts.map +1 -0
  300. package/packages/mailx-store-web/web-service.js +542 -0
  301. package/packages/mailx-store-web/web-service.js.map +1 -0
  302. package/packages/mailx-store-web/web-service.ts +616 -0
  303. package/packages/mailx-store-web/web-settings.d.ts +83 -0
  304. package/packages/mailx-store-web/web-settings.d.ts.map +1 -0
  305. package/packages/mailx-store-web/web-settings.js +491 -0
  306. package/packages/mailx-store-web/web-settings.js.map +1 -0
  307. package/packages/mailx-store-web/web-settings.ts +522 -0
  308. package/packages/mailx-store-web/worker-bundle.js +6838 -0
  309. package/packages/mailx-store-web/worker-entry.d.ts +8 -0
  310. package/packages/mailx-store-web/worker-entry.d.ts.map +1 -0
  311. package/packages/mailx-store-web/worker-entry.js +187 -0
  312. package/packages/mailx-store-web/worker-entry.js.map +1 -0
  313. package/packages/mailx-store-web/worker-entry.ts +215 -0
  314. package/packages/mailx-store-web/worker-tcp-transport.d.ts +28 -0
  315. package/packages/mailx-store-web/worker-tcp-transport.d.ts.map +1 -0
  316. package/packages/mailx-store-web/worker-tcp-transport.js +98 -0
  317. package/packages/mailx-store-web/worker-tcp-transport.js.map +1 -0
  318. package/packages/mailx-store-web/worker-tcp-transport.ts +101 -0
  319. package/packages/mailx-types/.gitattributes +10 -0
  320. package/packages/mailx-types/index.d.ts +319 -0
  321. package/packages/mailx-types/index.d.ts.map +1 -0
  322. package/packages/mailx-types/index.js +243 -0
  323. package/packages/mailx-types/index.js.map +1 -0
  324. package/packages/mailx-types/index.ts +498 -0
  325. package/packages/mailx-types/package.json +16 -0
  326. package/packages/mailx-types/tsconfig.json +9 -0
  327. package/packages/mailx-types/tsconfig.tsbuildinfo +1 -0
  328. package/todo.json +13 -0
  329. package/tsconfig.base.json +31 -0
  330. package/tsconfig.json +9 -0
@@ -0,0 +1,603 @@
1
+ /**
2
+ * Local mail service — runs entirely in the WebView.
3
+ * Uses mailxapi.tcp bridge for IMAP, IndexedDB for storage.
4
+ * Implements the same MailxTransport interface so the client doesn't know the difference.
5
+ *
6
+ * This is the Android equivalent of the Express server + MailxService.
7
+ */
8
+ import * as store from "./local-store.js";
9
+ // ── IMAP Parsing Helpers ──
10
+ /** Extract a balanced parenthesized group starting at position */
11
+ function extractParenGroup(s, start) {
12
+ if (s[start] !== "(")
13
+ return "";
14
+ let depth = 0;
15
+ for (let i = start; i < s.length; i++) {
16
+ if (s[i] === "(")
17
+ depth++;
18
+ else if (s[i] === ")") {
19
+ depth--;
20
+ if (depth === 0)
21
+ return s.substring(start, i + 1);
22
+ }
23
+ }
24
+ return s.substring(start);
25
+ }
26
+ /** Tokenize top-level items in a parenthesized IMAP list */
27
+ function tokenizeEnvelope(s) {
28
+ const tokens = [];
29
+ const str = s.trim();
30
+ const start = str.startsWith("(") ? 1 : 0;
31
+ const end = str.endsWith(")") ? str.length - 1 : str.length;
32
+ let i = start;
33
+ while (i < end) {
34
+ while (i < end && str[i] === " ")
35
+ i++;
36
+ if (i >= end)
37
+ break;
38
+ if (str[i] === "(") {
39
+ let depth = 1, j = i + 1;
40
+ while (j < end && depth > 0) {
41
+ if (str[j] === "(")
42
+ depth++;
43
+ else if (str[j] === ")")
44
+ depth--;
45
+ j++;
46
+ }
47
+ tokens.push(str.substring(i, j));
48
+ i = j;
49
+ }
50
+ else if (str[i] === '"') {
51
+ let j = i + 1;
52
+ while (j < end) {
53
+ if (str[j] === "\\" && j + 1 < end) {
54
+ j += 2;
55
+ continue;
56
+ }
57
+ if (str[j] === '"') {
58
+ j++;
59
+ break;
60
+ }
61
+ j++;
62
+ }
63
+ tokens.push(str.substring(i, j));
64
+ i = j;
65
+ }
66
+ else if (str.substring(i, i + 3).toUpperCase() === "NIL") {
67
+ tokens.push("NIL");
68
+ i += 3;
69
+ }
70
+ else {
71
+ let j = i;
72
+ while (j < end && str[j] !== " " && str[j] !== ")" && str[j] !== "(")
73
+ j++;
74
+ tokens.push(str.substring(i, j));
75
+ i = j;
76
+ }
77
+ }
78
+ return tokens;
79
+ }
80
+ /** Remove quotes from an IMAP string */
81
+ function unquoteImap(s) {
82
+ if (!s || s === "NIL")
83
+ return "";
84
+ if (s.startsWith('"') && s.endsWith('"'))
85
+ return s.slice(1, -1).replace(/\\(.)/g, "$1");
86
+ return s;
87
+ }
88
+ /** Parse IMAP address list: ((name NIL mailbox host)...) */
89
+ function parseImapAddressList(token) {
90
+ if (!token || token === "NIL")
91
+ return [];
92
+ const addrs = [];
93
+ const re = /\(([^)]*)\)/g;
94
+ let m;
95
+ while ((m = re.exec(token)) !== null) {
96
+ const parts = tokenizeEnvelope(m[1]);
97
+ if (parts.length >= 4) {
98
+ const name = unquoteImap(parts[0]);
99
+ const mailbox = unquoteImap(parts[2]);
100
+ const host = unquoteImap(parts[3]);
101
+ addrs.push({ name, address: mailbox && host ? `${mailbox}@${host}` : mailbox || "" });
102
+ }
103
+ }
104
+ return addrs;
105
+ }
106
+ /** Decode =?charset?encoding?text?= encoded words */
107
+ function decodeEncodedWords(s) {
108
+ if (!s)
109
+ return "";
110
+ return s.replace(/=\?([^?]+)\?([BQ])\?([^?]+)\?=/gi, (_match, _charset, encoding, text) => {
111
+ try {
112
+ if (encoding.toUpperCase() === "B")
113
+ return atob(text);
114
+ return text.replace(/=([0-9A-F]{2})/gi, (_, hex) => String.fromCharCode(parseInt(hex, 16))).replace(/_/g, " ");
115
+ }
116
+ catch {
117
+ return text;
118
+ }
119
+ });
120
+ }
121
+ let settings = null;
122
+ const eventHandlers = [];
123
+ function emit(event) {
124
+ for (const h of eventHandlers) {
125
+ try {
126
+ h(event);
127
+ }
128
+ catch { /* ignore */ }
129
+ }
130
+ }
131
+ // ── IMAP via Bridge ──
132
+ /** Minimal IMAP client that works through the mailxapi.tcp bridge */
133
+ class BridgeImapClient {
134
+ streamId = null;
135
+ buffer = "";
136
+ dataResolve = null;
137
+ tagCounter = 0;
138
+ async connect(host, port, tls) {
139
+ this.streamId = await mailxapi.tcp.connect(host, port, tls);
140
+ mailxapi.tcp.onData(this.streamId, (data) => {
141
+ this.buffer += data;
142
+ if (this.dataResolve && this.buffer.includes("\r\n")) {
143
+ const resolve = this.dataResolve;
144
+ this.dataResolve = null;
145
+ resolve(this.buffer);
146
+ }
147
+ });
148
+ // Read greeting
149
+ return this.readLine();
150
+ }
151
+ nextTag() {
152
+ return `A${++this.tagCounter}`;
153
+ }
154
+ async readLine() {
155
+ // Check buffer first
156
+ const idx = this.buffer.indexOf("\r\n");
157
+ if (idx >= 0) {
158
+ const line = this.buffer.substring(0, idx);
159
+ this.buffer = this.buffer.substring(idx + 2);
160
+ return line;
161
+ }
162
+ // Wait for data
163
+ return new Promise(resolve => {
164
+ this.dataResolve = () => {
165
+ const idx = this.buffer.indexOf("\r\n");
166
+ if (idx >= 0) {
167
+ const line = this.buffer.substring(0, idx);
168
+ this.buffer = this.buffer.substring(idx + 2);
169
+ resolve(line);
170
+ }
171
+ };
172
+ });
173
+ }
174
+ /** Read all responses until we get the tagged response */
175
+ async readUntilTag(tag) {
176
+ const lines = [];
177
+ const timeout = setTimeout(() => {
178
+ // Force resolve on timeout
179
+ if (this.dataResolve) {
180
+ this.dataResolve("");
181
+ this.dataResolve = null;
182
+ }
183
+ }, 30000);
184
+ while (true) {
185
+ const line = await this.readLine();
186
+ lines.push(line);
187
+ if (line.startsWith(tag + " ")) {
188
+ clearTimeout(timeout);
189
+ return lines;
190
+ }
191
+ }
192
+ }
193
+ async command(cmd) {
194
+ const tag = this.nextTag();
195
+ const full = `${tag} ${cmd}\r\n`;
196
+ if (this.streamId == null)
197
+ throw new Error("Not connected");
198
+ await mailxapi.tcp.write(this.streamId, full);
199
+ return this.readUntilTag(tag);
200
+ }
201
+ async login(user, pass) {
202
+ const resp = await this.command(`LOGIN "${user}" "${pass}"`);
203
+ return resp.some(l => l.includes(" OK "));
204
+ }
205
+ async xoauth2(user, token) {
206
+ const authStr = btoa(`user=${user}\x01auth=Bearer ${token}\x01\x01`);
207
+ const resp = await this.command(`AUTHENTICATE XOAUTH2 ${authStr}`);
208
+ return resp.some(l => l.includes(" OK "));
209
+ }
210
+ async list() {
211
+ const resp = await this.command('LIST "" "*"');
212
+ const folders = [];
213
+ for (const line of resp) {
214
+ const m = line.match(/^\* LIST \(([^)]*)\) "([^"]*)" (?:"([^"]+)"|(\S+))$/);
215
+ if (m) {
216
+ folders.push({
217
+ flags: m[1] ? m[1].split(/\s+/).filter(Boolean) : [],
218
+ delimiter: m[2] || ".",
219
+ path: m[3] || m[4] || "",
220
+ });
221
+ }
222
+ }
223
+ return folders;
224
+ }
225
+ async select(mailbox) {
226
+ const resp = await this.command(`SELECT "${mailbox}"`);
227
+ let exists = 0;
228
+ for (const line of resp) {
229
+ const m = line.match(/^\* (\d+) EXISTS/);
230
+ if (m)
231
+ exists = parseInt(m[1]);
232
+ }
233
+ return { exists };
234
+ }
235
+ async status(mailbox) {
236
+ const resp = await this.command(`STATUS "${mailbox}" (MESSAGES)`);
237
+ for (const line of resp) {
238
+ const m = line.match(/MESSAGES\s+(\d+)/);
239
+ if (m)
240
+ return { messages: parseInt(m[1]) };
241
+ }
242
+ return { messages: 0 };
243
+ }
244
+ async fetchHeaders(range) {
245
+ const resp = await this.command(`UID FETCH ${range} (UID FLAGS ENVELOPE RFC822.SIZE INTERNALDATE)`);
246
+ const messages = [];
247
+ // Join all response lines to handle multi-line FETCH responses
248
+ const fullResp = resp.join("\r\n");
249
+ // Split on "* N FETCH" boundaries
250
+ const fetchBlocks = fullResp.split(/(?=\* \d+ FETCH)/);
251
+ for (const block of fetchBlocks) {
252
+ if (!block.includes("FETCH"))
253
+ continue;
254
+ const uid = block.match(/UID\s+(\d+)/)?.[1];
255
+ if (!uid)
256
+ continue;
257
+ const flags = block.match(/FLAGS\s+\(([^)]*)\)/)?.[1] || "";
258
+ const size = block.match(/RFC822\.SIZE\s+(\d+)/)?.[1] || "0";
259
+ const dateMatch = block.match(/INTERNALDATE\s+"([^"]+)"/);
260
+ // Parse ENVELOPE: (date subject from sender reply-to to cc bcc in-reply-to message-id)
261
+ let subject = "", fromName = "", fromAddr = "", messageId = "";
262
+ let toAddrs = [];
263
+ let ccAddrs = [];
264
+ const envStart = block.indexOf("ENVELOPE (");
265
+ if (envStart >= 0) {
266
+ const envStr = extractParenGroup(block, envStart + 9);
267
+ const tokens = tokenizeEnvelope(envStr);
268
+ // tokens[0]=date, [1]=subject, [2]=from, [3]=sender, [4]=reply-to, [5]=to, [6]=cc, [7]=bcc, [8]=in-reply-to, [9]=message-id
269
+ if (tokens.length >= 10) {
270
+ subject = unquoteImap(tokens[1]);
271
+ messageId = unquoteImap(tokens[9]);
272
+ const fromList = parseImapAddressList(tokens[2]);
273
+ if (fromList.length > 0) {
274
+ fromName = fromList[0].name;
275
+ fromAddr = fromList[0].address;
276
+ }
277
+ toAddrs = parseImapAddressList(tokens[5]);
278
+ ccAddrs = parseImapAddressList(tokens[6]);
279
+ }
280
+ }
281
+ messages.push({
282
+ uid: parseInt(uid),
283
+ flags: flags.split(/\s+/).filter(Boolean),
284
+ size: parseInt(size),
285
+ date: dateMatch ? new Date(dateMatch[1]).getTime() : Date.now(),
286
+ subject: decodeEncodedWords(subject),
287
+ fromName: decodeEncodedWords(fromName),
288
+ fromAddr,
289
+ messageId,
290
+ to: toAddrs,
291
+ cc: ccAddrs,
292
+ });
293
+ }
294
+ return messages;
295
+ }
296
+ async fetchBody(uid) {
297
+ const tag = this.nextTag();
298
+ const cmd = `${tag} UID FETCH ${uid} (BODY.PEEK[])\r\n`;
299
+ if (this.streamId == null)
300
+ throw new Error("Not connected");
301
+ await mailxapi.tcp.write(this.streamId, cmd);
302
+ // Read response including literal data
303
+ let allData = "";
304
+ const deadline = Date.now() + 30000;
305
+ while (Date.now() < deadline) {
306
+ const chunk = await this.readLine();
307
+ allData += chunk + "\r\n";
308
+ if (chunk.startsWith(tag + " "))
309
+ break;
310
+ }
311
+ return allData;
312
+ }
313
+ async logout() {
314
+ try {
315
+ await this.command("LOGOUT");
316
+ }
317
+ catch { /* ignore */ }
318
+ if (this.streamId != null) {
319
+ mailxapi.tcp.close(this.streamId);
320
+ this.streamId = null;
321
+ }
322
+ }
323
+ async close() {
324
+ try {
325
+ await this.command("CLOSE");
326
+ }
327
+ catch { /* ignore */ }
328
+ }
329
+ async storeFlags(uid, action, flags) {
330
+ await this.command(`UID STORE ${uid} ${action} (${flags.join(" ")})`);
331
+ }
332
+ async copy(uid, dest) {
333
+ await this.command(`UID COPY ${uid} "${dest}"`);
334
+ }
335
+ async expunge() {
336
+ await this.command("EXPUNGE");
337
+ }
338
+ async search(criteria) {
339
+ const resp = await this.command(`UID SEARCH ${criteria}`);
340
+ for (const line of resp) {
341
+ if (line.startsWith("* SEARCH")) {
342
+ return line.substring(9).trim().split(/\s+/).map(Number).filter(n => !isNaN(n));
343
+ }
344
+ }
345
+ return [];
346
+ }
347
+ }
348
+ // ── Service Methods ──
349
+ async function loadSettingsFromStorage() {
350
+ // Try IndexedDB meta first
351
+ const saved = await store.getMeta("settings");
352
+ if (saved)
353
+ return saved;
354
+ // Default empty
355
+ return { accounts: [] };
356
+ }
357
+ async function saveSettingsToStorage(s) {
358
+ settings = s;
359
+ await store.setMeta("settings", s);
360
+ }
361
+ async function syncAccount(account) {
362
+ const client = new BridgeImapClient();
363
+ try {
364
+ const greeting = await client.connect(account.imap.host, account.imap.port || 993, (account.imap.port || 993) === 993);
365
+ console.log(`[local-service] Connected to ${account.imap.host}: ${greeting}`);
366
+ // Authenticate
367
+ let authOk;
368
+ if (account.imap.auth === "oauth2") {
369
+ // TODO: OAuth token via bridge — for now skip
370
+ console.log("[local-service] OAuth not yet supported in bridge mode");
371
+ await client.logout();
372
+ return;
373
+ }
374
+ else {
375
+ authOk = await client.login(account.imap.user, account.imap.password || "");
376
+ }
377
+ if (!authOk) {
378
+ console.error("[local-service] Auth failed");
379
+ await client.logout();
380
+ return;
381
+ }
382
+ emit({ type: "syncProgress", accountId: account.id, phase: "folders", progress: 0 });
383
+ // Get folder list
384
+ const folders = await client.list();
385
+ let nextFolderId = (await store.getMeta("nextFolderId")) || 1;
386
+ for (const f of folders) {
387
+ const existing = (await store.getFolders(account.id)).find(ef => ef.path === f.path);
388
+ if (!existing) {
389
+ const flags = f.flags.map(fl => fl.toLowerCase());
390
+ let specialUse = "";
391
+ if (flags.includes("\\inbox") || f.path.toLowerCase() === "inbox")
392
+ specialUse = "inbox";
393
+ else if (flags.includes("\\sent"))
394
+ specialUse = "sent";
395
+ else if (flags.includes("\\trash"))
396
+ specialUse = "trash";
397
+ else if (flags.includes("\\drafts"))
398
+ specialUse = "drafts";
399
+ else if (flags.includes("\\junk"))
400
+ specialUse = "junk";
401
+ else if (flags.includes("\\archive"))
402
+ specialUse = "archive";
403
+ await store.upsertFolder({
404
+ id: nextFolderId++,
405
+ accountId: account.id,
406
+ path: f.path,
407
+ delimiter: f.delimiter,
408
+ specialUse,
409
+ totalCount: 0,
410
+ unreadCount: 0,
411
+ });
412
+ }
413
+ }
414
+ await store.setMeta("nextFolderId", nextFolderId);
415
+ emit({ type: "syncProgress", accountId: account.id, phase: "folders", progress: 100 });
416
+ // Sync inbox
417
+ const allFolders = await store.getFolders(account.id);
418
+ const inbox = allFolders.find(f => f.specialUse === "inbox");
419
+ if (inbox) {
420
+ await syncFolder(client, account.id, inbox);
421
+ }
422
+ // Emit folder counts
423
+ const updatedFolders = await store.getFolders(account.id);
424
+ const counts = {};
425
+ for (const f of updatedFolders) {
426
+ counts[f.id] = { total: f.totalCount, unread: f.unreadCount };
427
+ }
428
+ emit({ type: "folderCountsChanged", accountId: account.id, counts });
429
+ await client.logout();
430
+ }
431
+ catch (e) {
432
+ console.error(`[local-service] Sync error: ${e.message}`);
433
+ emit({ type: "error", message: `${account.id}: ${e.message}` });
434
+ }
435
+ }
436
+ async function syncFolder(client, accountId, folder) {
437
+ emit({ type: "syncProgress", accountId, phase: `sync:${folder.path}`, progress: 0 });
438
+ const { exists } = await client.select(folder.path);
439
+ const highestUid = await store.getHighestUid(accountId, folder.id);
440
+ let msgs;
441
+ if (highestUid > 0) {
442
+ msgs = await client.fetchHeaders(`${highestUid + 1}:*`);
443
+ msgs = msgs.filter(m => m.uid > highestUid);
444
+ }
445
+ else {
446
+ // First sync — get recent messages
447
+ const uids = await client.search("ALL");
448
+ // Take last 200 UIDs (most recent)
449
+ const recent = uids.slice(-200);
450
+ if (recent.length > 0) {
451
+ msgs = await client.fetchHeaders(recent.join(","));
452
+ }
453
+ else {
454
+ msgs = [];
455
+ }
456
+ }
457
+ // Store messages
458
+ let newCount = 0;
459
+ for (const msg of msgs) {
460
+ await store.upsertMessage({
461
+ key: `${accountId}:${folder.id}:${msg.uid}`,
462
+ accountId,
463
+ folderId: folder.id,
464
+ uid: msg.uid,
465
+ messageId: msg.messageId || "",
466
+ date: msg.date,
467
+ subject: msg.subject || "(no subject)",
468
+ fromName: msg.fromName || "",
469
+ fromAddress: msg.fromAddr || "",
470
+ toJson: JSON.stringify(msg.to || []),
471
+ ccJson: JSON.stringify(msg.cc || []),
472
+ flags: msg.flags.join(","),
473
+ size: msg.size,
474
+ hasAttachments: false,
475
+ preview: "",
476
+ bodyPath: "",
477
+ });
478
+ newCount++;
479
+ }
480
+ // Update folder counts
481
+ const allMsgs = await store.getMessages(accountId, folder.id, 1, 999999);
482
+ const total = allMsgs.total;
483
+ const unread = allMsgs.items.filter((m) => !m.flags.includes("\\Seen")).length;
484
+ await store.updateFolderCounts(folder.id, total, unread);
485
+ emit({ type: "syncProgress", accountId, phase: `sync:${folder.path}`, progress: 100 });
486
+ if (newCount > 0) {
487
+ console.log(`[local-service] ${folder.path}: ${newCount} new messages`);
488
+ emit({ type: "folderCountsChanged", accountId, counts: { [folder.id]: { total, unread } } });
489
+ }
490
+ await client.close();
491
+ }
492
+ export async function handleCall(method, params = {}) {
493
+ switch (method) {
494
+ case "getAccounts": {
495
+ const accounts = await store.getAccounts();
496
+ if (!settings)
497
+ settings = await loadSettingsFromStorage();
498
+ return accounts.map(a => {
499
+ const cfg = settings.accounts.find(s => s.id === a.id);
500
+ return { ...a, label: cfg?.label, defaultSend: cfg?.defaultSend || false };
501
+ });
502
+ }
503
+ case "getFolders":
504
+ return store.getFolders(params.accountId);
505
+ case "getMessages":
506
+ return store.getMessages(params.accountId, params.folderId, params.page, params.pageSize);
507
+ case "getUnifiedInbox":
508
+ return store.getUnifiedInbox(params.page, params.pageSize);
509
+ case "getMessage": {
510
+ const env = await store.getMessageByUid(params.accountId, params.uid, params.folderId);
511
+ if (!env)
512
+ return { error: "not found" };
513
+ // Try to get body from IndexedDB
514
+ const body = await store.getBody(env.accountId, env.folderId, env.uid);
515
+ return { ...env, bodyHtml: "", bodyText: body || "[Body not yet downloaded]", hasRemoteContent: false, remoteAllowed: false, attachments: [], emlPath: "", deliveredTo: "", returnPath: "", listUnsubscribe: "" };
516
+ }
517
+ case "searchContacts":
518
+ return store.searchContacts(params.query || "");
519
+ case "getSyncPending":
520
+ return { pending: 0 };
521
+ case "triggerSync": {
522
+ if (!settings)
523
+ settings = await loadSettingsFromStorage();
524
+ for (const account of settings.accounts) {
525
+ if (account.enabled !== false) {
526
+ syncAccount(account).catch(e => console.error(`[local-service] ${e.message}`));
527
+ }
528
+ }
529
+ return { ok: true };
530
+ }
531
+ case "updateFlags":
532
+ // TODO: queue IMAP flag update
533
+ return { ok: true };
534
+ case "deleteMessage":
535
+ await store.deleteMessage(params.accountId, params.uid);
536
+ return { ok: true };
537
+ case "moveMessage":
538
+ // TODO: queue IMAP move
539
+ return { ok: true };
540
+ case "undeleteMessage":
541
+ return { ok: true };
542
+ case "searchMessages":
543
+ // Simple local search
544
+ return { items: [], total: 0, page: 1, pageSize: 50 };
545
+ case "allowRemoteContent":
546
+ return { ok: true };
547
+ case "markFolderRead":
548
+ return { ok: true };
549
+ case "restartServer":
550
+ case "rebuildServer":
551
+ return { ok: true };
552
+ case "createFolder":
553
+ case "renameFolder":
554
+ case "deleteFolder":
555
+ case "emptyFolder":
556
+ return { ok: true };
557
+ case "sendMessage":
558
+ case "saveDraft":
559
+ return { ok: true };
560
+ default:
561
+ console.warn(`[local-service] Unknown method: ${method}`);
562
+ return { error: `Unknown: ${method}` };
563
+ }
564
+ }
565
+ export function onEvent(handler) {
566
+ eventHandlers.push(handler);
567
+ }
568
+ /** Initialize the local service — load settings, start sync */
569
+ export async function initialize(initialSettings) {
570
+ await store.init();
571
+ if (initialSettings) {
572
+ await saveSettingsToStorage(initialSettings);
573
+ settings = initialSettings;
574
+ }
575
+ else {
576
+ settings = await loadSettingsFromStorage();
577
+ }
578
+ // Register accounts in IndexedDB
579
+ for (const account of settings.accounts) {
580
+ await store.upsertAccount(account.id, account.name, account.email, JSON.stringify(account));
581
+ }
582
+ emit({ type: "connected" });
583
+ // Start initial sync
584
+ for (const account of settings.accounts) {
585
+ if (account.enabled !== false) {
586
+ syncAccount(account).catch(e => console.error(`[local-service] ${e.message}`));
587
+ }
588
+ }
589
+ // Periodic re-sync every 30 seconds
590
+ setInterval(async () => {
591
+ if (!settings)
592
+ return;
593
+ for (const account of settings.accounts) {
594
+ if (account.enabled !== false) {
595
+ syncAccount(account).catch(e => console.error(`[local-service] periodic: ${e.message}`));
596
+ }
597
+ }
598
+ }, 30000);
599
+ }
600
+ export function getSettings() {
601
+ return settings;
602
+ }
603
+ //# sourceMappingURL=local-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-service.js","sourceRoot":"","sources":["local-service.ts"],"names":[],"mappings":"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"}