@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.
- package/README.md +429 -0
- package/bin/build-icon-ico.js +283 -0
- package/bin/lean-accounts.js +172 -0
- package/bin/mailx.js +1580 -0
- package/bin/mailx.js.map +1 -0
- package/bin/mailx.ts +1549 -0
- package/bin/postinstall.js +39 -0
- package/bin/postinstall.js.map +1 -0
- package/bin/postinstall.ts +41 -0
- package/bin/tsconfig.json +10 -0
- package/client/.gitattributes +10 -0
- package/client/.msger-window.json +1 -0
- package/client/android.html +226 -0
- package/client/app.js +3400 -0
- package/client/app.js.map +1 -0
- package/client/app.ts +3190 -0
- package/client/components/address-book.js +199 -0
- package/client/components/address-book.js.map +1 -0
- package/client/components/address-book.ts +204 -0
- package/client/components/alarms.js +299 -0
- package/client/components/alarms.js.map +1 -0
- package/client/components/alarms.ts +276 -0
- package/client/components/calendar-sidebar.js +508 -0
- package/client/components/calendar-sidebar.js.map +1 -0
- package/client/components/calendar-sidebar.ts +474 -0
- package/client/components/calendar.js +217 -0
- package/client/components/calendar.js.map +1 -0
- package/client/components/calendar.ts +211 -0
- package/client/components/context-menu.js +80 -0
- package/client/components/context-menu.js.map +1 -0
- package/client/components/context-menu.ts +95 -0
- package/client/components/folder-picker.js +119 -0
- package/client/components/folder-picker.js.map +1 -0
- package/client/components/folder-picker.ts +127 -0
- package/client/components/folder-tree.js +1093 -0
- package/client/components/folder-tree.js.map +1 -0
- package/client/components/folder-tree.ts +1069 -0
- package/client/components/message-list.js +1140 -0
- package/client/components/message-list.js.map +1 -0
- package/client/components/message-list.ts +1129 -0
- package/client/components/message-viewer.js +1291 -0
- package/client/components/message-viewer.js.map +1 -0
- package/client/components/message-viewer.ts +1257 -0
- package/client/components/outbox-view.js +104 -0
- package/client/components/outbox-view.js.map +1 -0
- package/client/components/outbox-view.ts +102 -0
- package/client/components/tasks.js +261 -0
- package/client/components/tasks.js.map +1 -0
- package/client/components/tasks.ts +234 -0
- package/client/compose/compose.css +560 -0
- package/client/compose/compose.html +52 -0
- package/client/compose/compose.js +1289 -0
- package/client/compose/compose.js.map +1 -0
- package/client/compose/compose.ts +1231 -0
- package/client/compose/editor.js +616 -0
- package/client/compose/editor.js.map +1 -0
- package/client/compose/editor.ts +599 -0
- package/client/compose/ghost-text.js +122 -0
- package/client/compose/ghost-text.js.map +1 -0
- package/client/compose/ghost-text.ts +140 -0
- package/client/favicon.svg +11 -0
- package/client/icon.ico +0 -0
- package/client/icon.png +0 -0
- package/client/index.html +230 -0
- package/client/lib/android-bootstrap.js +9 -0
- package/client/lib/android-bootstrap.js.map +1 -0
- package/client/lib/android-bootstrap.ts +9 -0
- package/client/lib/api-client.js +378 -0
- package/client/lib/api-client.js.map +1 -0
- package/client/lib/api-client.ts +439 -0
- package/client/lib/local-service.js +603 -0
- package/client/lib/local-service.js.map +1 -0
- package/client/lib/local-service.ts +646 -0
- package/client/lib/local-store.js +214 -0
- package/client/lib/local-store.js.map +1 -0
- package/client/lib/local-store.ts +283 -0
- package/client/lib/mailxapi.js +304 -0
- package/client/lib/message-state.js +132 -0
- package/client/lib/message-state.js.map +1 -0
- package/client/lib/message-state.ts +160 -0
- package/client/package.json +16 -0
- package/client/styles/components.css +2049 -0
- package/client/styles/layout.css +332 -0
- package/client/styles/variables.css +85 -0
- package/client/tsconfig.json +19 -0
- package/package.json +124 -0
- package/packages/mailx-api/.gitattributes +10 -0
- package/packages/mailx-api/index.d.ts +10 -0
- package/packages/mailx-api/index.d.ts.map +1 -0
- package/packages/mailx-api/index.js +322 -0
- package/packages/mailx-api/index.js.map +1 -0
- package/packages/mailx-api/index.ts +283 -0
- package/packages/mailx-api/package.json +27 -0
- package/packages/mailx-api/tsconfig.json +9 -0
- package/packages/mailx-api/tsconfig.tsbuildinfo +1 -0
- package/packages/mailx-compose/.gitattributes +10 -0
- package/packages/mailx-compose/index.d.ts +21 -0
- package/packages/mailx-compose/index.d.ts.map +1 -0
- package/packages/mailx-compose/index.js +61 -0
- package/packages/mailx-compose/index.js.map +1 -0
- package/packages/mailx-compose/index.ts +85 -0
- package/packages/mailx-compose/package.json +18 -0
- package/packages/mailx-compose/tsconfig.json +9 -0
- package/packages/mailx-core/index.d.ts +139 -0
- package/packages/mailx-core/index.d.ts.map +1 -0
- package/packages/mailx-core/index.js +403 -0
- package/packages/mailx-core/index.js.map +1 -0
- package/packages/mailx-core/index.ts +424 -0
- package/packages/mailx-core/ipc.d.ts +13 -0
- package/packages/mailx-core/ipc.d.ts.map +1 -0
- package/packages/mailx-core/ipc.js +56 -0
- package/packages/mailx-core/ipc.js.map +1 -0
- package/packages/mailx-core/ipc.ts +62 -0
- package/packages/mailx-core/package.json +18 -0
- package/packages/mailx-core/tsconfig.json +9 -0
- package/packages/mailx-host/.gitattributes +10 -0
- package/packages/mailx-host/index.d.ts +21 -0
- package/packages/mailx-host/index.d.ts.map +1 -0
- package/packages/mailx-host/index.js +29 -0
- package/packages/mailx-host/index.js.map +1 -0
- package/packages/mailx-host/index.ts +38 -0
- package/packages/mailx-host/package.json +23 -0
- package/packages/mailx-host/tsconfig.json +9 -0
- package/packages/mailx-host/types-shim.d.ts +14 -0
- package/packages/mailx-imap/.gitattributes +10 -0
- package/packages/mailx-imap/index.d.ts +442 -0
- package/packages/mailx-imap/index.d.ts.map +1 -0
- package/packages/mailx-imap/index.js +3684 -0
- package/packages/mailx-imap/index.js.map +1 -0
- package/packages/mailx-imap/index.ts +3652 -0
- package/packages/mailx-imap/package-lock.json +131 -0
- package/packages/mailx-imap/package.json +28 -0
- package/packages/mailx-imap/providers/gmail-api.d.ts +8 -0
- package/packages/mailx-imap/providers/gmail-api.d.ts.map +1 -0
- package/packages/mailx-imap/providers/gmail-api.js +8 -0
- package/packages/mailx-imap/providers/gmail-api.js.map +1 -0
- package/packages/mailx-imap/providers/gmail-api.ts +8 -0
- package/packages/mailx-imap/providers/outlook-api.ts +7 -0
- package/packages/mailx-imap/providers/types.d.ts +9 -0
- package/packages/mailx-imap/providers/types.d.ts.map +1 -0
- package/packages/mailx-imap/providers/types.js +9 -0
- package/packages/mailx-imap/providers/types.js.map +1 -0
- package/packages/mailx-imap/providers/types.ts +9 -0
- package/packages/mailx-imap/tsconfig.json +9 -0
- package/packages/mailx-imap/tsconfig.tsbuildinfo +1 -0
- package/packages/mailx-send/.gitattributes +10 -0
- package/packages/mailx-send/README.md +217 -0
- package/packages/mailx-send/cli-queue.d.ts +11 -0
- package/packages/mailx-send/cli-queue.d.ts.map +1 -0
- package/packages/mailx-send/cli-queue.js +59 -0
- package/packages/mailx-send/cli-queue.js.map +1 -0
- package/packages/mailx-send/cli-queue.ts +62 -0
- package/packages/mailx-send/cli-send.d.ts +17 -0
- package/packages/mailx-send/cli-send.d.ts.map +1 -0
- package/packages/mailx-send/cli-send.js +75 -0
- package/packages/mailx-send/cli-send.js.map +1 -0
- package/packages/mailx-send/cli-send.ts +83 -0
- package/packages/mailx-send/cli.d.ts +22 -0
- package/packages/mailx-send/cli.d.ts.map +1 -0
- package/packages/mailx-send/cli.js +115 -0
- package/packages/mailx-send/cli.js.map +1 -0
- package/packages/mailx-send/cli.ts +126 -0
- package/packages/mailx-send/index.d.ts +77 -0
- package/packages/mailx-send/index.d.ts.map +1 -0
- package/packages/mailx-send/index.js +264 -0
- package/packages/mailx-send/index.js.map +1 -0
- package/packages/mailx-send/index.ts +333 -0
- package/packages/mailx-send/mailsend/README.md +133 -0
- package/packages/mailx-send/mailsend/cli.d.ts +12 -0
- package/packages/mailx-send/mailsend/cli.d.ts.map +1 -0
- package/packages/mailx-send/mailsend/cli.js +70 -0
- package/packages/mailx-send/mailsend/cli.js.map +1 -0
- package/packages/mailx-send/mailsend/cli.ts +81 -0
- package/packages/mailx-send/mailsend/index.d.ts +77 -0
- package/packages/mailx-send/mailsend/index.d.ts.map +1 -0
- package/packages/mailx-send/mailsend/index.js +264 -0
- package/packages/mailx-send/mailsend/index.js.map +1 -0
- package/packages/mailx-send/mailsend/index.ts +333 -0
- package/packages/mailx-send/mailsend/package-lock.json +65 -0
- package/packages/mailx-send/mailsend/package.json +26 -0
- package/packages/mailx-send/mailsend/tsconfig.json +21 -0
- package/packages/mailx-send/package-lock.json +65 -0
- package/packages/mailx-send/package.json +37 -0
- package/packages/mailx-send/tsconfig.json +21 -0
- package/packages/mailx-server/.gitattributes +10 -0
- package/packages/mailx-server/index.d.ts +8 -0
- package/packages/mailx-server/index.d.ts.map +1 -0
- package/packages/mailx-server/index.js +397 -0
- package/packages/mailx-server/index.js.map +1 -0
- package/packages/mailx-server/index.ts +429 -0
- package/packages/mailx-server/package.json +28 -0
- package/packages/mailx-server/tsconfig.json +9 -0
- package/packages/mailx-server/tsconfig.tsbuildinfo +1 -0
- package/packages/mailx-service/google-sync.d.ts +96 -0
- package/packages/mailx-service/google-sync.d.ts.map +1 -0
- package/packages/mailx-service/google-sync.js +153 -0
- package/packages/mailx-service/google-sync.js.map +1 -0
- package/packages/mailx-service/google-sync.ts +238 -0
- package/packages/mailx-service/index.d.ts +366 -0
- package/packages/mailx-service/index.d.ts.map +1 -0
- package/packages/mailx-service/index.js +2589 -0
- package/packages/mailx-service/index.js.map +1 -0
- package/packages/mailx-service/index.ts +2512 -0
- package/packages/mailx-service/jsonrpc.d.ts +25 -0
- package/packages/mailx-service/jsonrpc.d.ts.map +1 -0
- package/packages/mailx-service/jsonrpc.js +238 -0
- package/packages/mailx-service/jsonrpc.js.map +1 -0
- package/packages/mailx-service/jsonrpc.ts +268 -0
- package/packages/mailx-service/package.json +22 -0
- package/packages/mailx-service/tsconfig.json +9 -0
- package/packages/mailx-settings/.gitattributes +10 -0
- package/packages/mailx-settings/cloud.d.ts +47 -0
- package/packages/mailx-settings/cloud.d.ts.map +1 -0
- package/packages/mailx-settings/cloud.js +408 -0
- package/packages/mailx-settings/cloud.js.map +1 -0
- package/packages/mailx-settings/cloud.ts +393 -0
- package/packages/mailx-settings/index.d.ts +140 -0
- package/packages/mailx-settings/index.d.ts.map +1 -0
- package/packages/mailx-settings/index.js +872 -0
- package/packages/mailx-settings/index.js.map +1 -0
- package/packages/mailx-settings/index.ts +908 -0
- package/packages/mailx-settings/package.json +20 -0
- package/packages/mailx-settings/tsconfig.json +9 -0
- package/packages/mailx-settings/tsconfig.tsbuildinfo +1 -0
- package/packages/mailx-store/.gitattributes +10 -0
- package/packages/mailx-store/db.d.ts +346 -0
- package/packages/mailx-store/db.d.ts.map +1 -0
- package/packages/mailx-store/db.js +1796 -0
- package/packages/mailx-store/db.js.map +1 -0
- package/packages/mailx-store/db.ts +2007 -0
- package/packages/mailx-store/file-store.d.ts +36 -0
- package/packages/mailx-store/file-store.d.ts.map +1 -0
- package/packages/mailx-store/file-store.js +80 -0
- package/packages/mailx-store/file-store.js.map +1 -0
- package/packages/mailx-store/file-store.ts +82 -0
- package/packages/mailx-store/index.d.ts +7 -0
- package/packages/mailx-store/index.d.ts.map +1 -0
- package/packages/mailx-store/index.js +7 -0
- package/packages/mailx-store/index.js.map +1 -0
- package/packages/mailx-store/index.ts +7 -0
- package/packages/mailx-store/package.json +19 -0
- package/packages/mailx-store/tsconfig.json +9 -0
- package/packages/mailx-store/tsconfig.tsbuildinfo +1 -0
- package/packages/mailx-store-web/android-bootstrap.d.ts +16 -0
- package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -0
- package/packages/mailx-store-web/android-bootstrap.js +1247 -0
- package/packages/mailx-store-web/android-bootstrap.js.map +1 -0
- package/packages/mailx-store-web/android-bootstrap.ts +1262 -0
- package/packages/mailx-store-web/db.d.ts +132 -0
- package/packages/mailx-store-web/db.d.ts.map +1 -0
- package/packages/mailx-store-web/db.js +642 -0
- package/packages/mailx-store-web/db.js.map +1 -0
- package/packages/mailx-store-web/db.ts +756 -0
- package/packages/mailx-store-web/gmail-api-web.d.ts +11 -0
- package/packages/mailx-store-web/gmail-api-web.d.ts.map +1 -0
- package/packages/mailx-store-web/gmail-api-web.js +11 -0
- package/packages/mailx-store-web/gmail-api-web.js.map +1 -0
- package/packages/mailx-store-web/gmail-api-web.ts +11 -0
- package/packages/mailx-store-web/imap-web-provider.d.ts +33 -0
- package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -0
- package/packages/mailx-store-web/imap-web-provider.js +140 -0
- package/packages/mailx-store-web/imap-web-provider.js.map +1 -0
- package/packages/mailx-store-web/imap-web-provider.ts +156 -0
- package/packages/mailx-store-web/index.d.ts +10 -0
- package/packages/mailx-store-web/index.d.ts.map +1 -0
- package/packages/mailx-store-web/index.js +10 -0
- package/packages/mailx-store-web/index.js.map +1 -0
- package/packages/mailx-store-web/index.ts +10 -0
- package/packages/mailx-store-web/main-thread-host.d.ts +15 -0
- package/packages/mailx-store-web/main-thread-host.d.ts.map +1 -0
- package/packages/mailx-store-web/main-thread-host.js +292 -0
- package/packages/mailx-store-web/main-thread-host.js.map +1 -0
- package/packages/mailx-store-web/main-thread-host.ts +322 -0
- package/packages/mailx-store-web/package.json +23 -0
- package/packages/mailx-store-web/provider-types.d.ts +7 -0
- package/packages/mailx-store-web/provider-types.d.ts.map +1 -0
- package/packages/mailx-store-web/provider-types.js +7 -0
- package/packages/mailx-store-web/provider-types.js.map +1 -0
- package/packages/mailx-store-web/provider-types.ts +7 -0
- package/packages/mailx-store-web/sql-wasm-esm.js +10 -0
- package/packages/mailx-store-web/sql.js.d.ts +29 -0
- package/packages/mailx-store-web/sync-manager.d.ts +68 -0
- package/packages/mailx-store-web/sync-manager.d.ts.map +1 -0
- package/packages/mailx-store-web/sync-manager.js +506 -0
- package/packages/mailx-store-web/sync-manager.js.map +1 -0
- package/packages/mailx-store-web/sync-manager.ts +508 -0
- package/packages/mailx-store-web/tsconfig.json +10 -0
- package/packages/mailx-store-web/web-jsonrpc.d.ts +20 -0
- package/packages/mailx-store-web/web-jsonrpc.d.ts.map +1 -0
- package/packages/mailx-store-web/web-jsonrpc.js +102 -0
- package/packages/mailx-store-web/web-jsonrpc.js.map +1 -0
- package/packages/mailx-store-web/web-jsonrpc.ts +116 -0
- package/packages/mailx-store-web/web-message-store.d.ts +16 -0
- package/packages/mailx-store-web/web-message-store.d.ts.map +1 -0
- package/packages/mailx-store-web/web-message-store.js +89 -0
- package/packages/mailx-store-web/web-message-store.js.map +1 -0
- package/packages/mailx-store-web/web-message-store.ts +97 -0
- package/packages/mailx-store-web/web-service.d.ts +111 -0
- package/packages/mailx-store-web/web-service.d.ts.map +1 -0
- package/packages/mailx-store-web/web-service.js +542 -0
- package/packages/mailx-store-web/web-service.js.map +1 -0
- package/packages/mailx-store-web/web-service.ts +616 -0
- package/packages/mailx-store-web/web-settings.d.ts +83 -0
- package/packages/mailx-store-web/web-settings.d.ts.map +1 -0
- package/packages/mailx-store-web/web-settings.js +491 -0
- package/packages/mailx-store-web/web-settings.js.map +1 -0
- package/packages/mailx-store-web/web-settings.ts +522 -0
- package/packages/mailx-store-web/worker-bundle.js +6838 -0
- package/packages/mailx-store-web/worker-entry.d.ts +8 -0
- package/packages/mailx-store-web/worker-entry.d.ts.map +1 -0
- package/packages/mailx-store-web/worker-entry.js +187 -0
- package/packages/mailx-store-web/worker-entry.js.map +1 -0
- package/packages/mailx-store-web/worker-entry.ts +215 -0
- package/packages/mailx-store-web/worker-tcp-transport.d.ts +28 -0
- package/packages/mailx-store-web/worker-tcp-transport.d.ts.map +1 -0
- package/packages/mailx-store-web/worker-tcp-transport.js +98 -0
- package/packages/mailx-store-web/worker-tcp-transport.js.map +1 -0
- package/packages/mailx-store-web/worker-tcp-transport.ts +101 -0
- package/packages/mailx-types/.gitattributes +10 -0
- package/packages/mailx-types/index.d.ts +319 -0
- package/packages/mailx-types/index.d.ts.map +1 -0
- package/packages/mailx-types/index.js +243 -0
- package/packages/mailx-types/index.js.map +1 -0
- package/packages/mailx-types/index.ts +498 -0
- package/packages/mailx-types/package.json +16 -0
- package/packages/mailx-types/tsconfig.json +9 -0
- package/packages/mailx-types/tsconfig.tsbuildinfo +1 -0
- package/todo.json +13 -0
- package/tsconfig.base.json +31 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @bobfrankston/mailx-service
|
|
3
|
+
* Pure business logic — no HTTP, no Express.
|
|
4
|
+
* Both the Express API (mailx-api) and the Android bridge call these functions.
|
|
5
|
+
*/
|
|
6
|
+
import { MailxDB } from "@bobfrankston/mailx-store";
|
|
7
|
+
import { ImapManager } from "@bobfrankston/mailx-imap";
|
|
8
|
+
import type { Folder, AutocompleteRequest, AutocompleteResponse, AutocompleteSettings, AiTransformRequest, AiTransformResponse } from "@bobfrankston/mailx-types";
|
|
9
|
+
interface ReputationResult {
|
|
10
|
+
flagged: boolean;
|
|
11
|
+
listedCount: number;
|
|
12
|
+
checkedCount: number;
|
|
13
|
+
sources: Array<{
|
|
14
|
+
service: string;
|
|
15
|
+
flagged: boolean;
|
|
16
|
+
verdict: string;
|
|
17
|
+
}>;
|
|
18
|
+
verdict: string;
|
|
19
|
+
service: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class MailxService {
|
|
22
|
+
private db;
|
|
23
|
+
private imapManager;
|
|
24
|
+
private _accountsCache;
|
|
25
|
+
constructor(db: MailxDB, imapManager: ImapManager);
|
|
26
|
+
private _contactsFlushTimer;
|
|
27
|
+
private _contactsFlushInFlight;
|
|
28
|
+
private readonly CONTACTS_FLUSH_DEBOUNCE_MS;
|
|
29
|
+
/** Schedule a debounced flush of the local contacts state to GDrive.
|
|
30
|
+
* Multiple changes within the debounce window collapse to one write. */
|
|
31
|
+
markContactsDirty(): void;
|
|
32
|
+
/** Write current DB contacts state to GDrive contacts.jsonc. Called via
|
|
33
|
+
* the debounced timer; also exposed for force-flush on shutdown or
|
|
34
|
+
* after a manual seed. Idempotent — safe to call multiple times. */
|
|
35
|
+
flushContactsConfig(): Promise<void>;
|
|
36
|
+
/** Read contacts.jsonc from cloud + apply (preferred + denylist + discovered)
|
|
37
|
+
* into the DB. On first run with no file, seed from message corpus and
|
|
38
|
+
* write a fresh contacts.jsonc to GDrive — that auto-bootstrap is what
|
|
39
|
+
* makes a new device useful immediately on a shared GDrive setup. */
|
|
40
|
+
loadContactsConfig(): Promise<{
|
|
41
|
+
preferred: number;
|
|
42
|
+
discovered: number;
|
|
43
|
+
purged: number;
|
|
44
|
+
conflicts: string[];
|
|
45
|
+
} | null>;
|
|
46
|
+
/** Append an entry to contacts.jsonc#preferred[] and write back to cloud,
|
|
47
|
+
* then re-apply. Mutates the file in place — preserves existing entries
|
|
48
|
+
* and the user's hand-formatting where the parser permits. */
|
|
49
|
+
addPreferredContact(entry: {
|
|
50
|
+
name: string;
|
|
51
|
+
email: string;
|
|
52
|
+
source?: string;
|
|
53
|
+
organization?: string;
|
|
54
|
+
}): Promise<void>;
|
|
55
|
+
/** Append an email to contacts.jsonc#denylist[] and write back to cloud,
|
|
56
|
+
* then re-apply (which purges any matching discovered rows). */
|
|
57
|
+
addToDenylist(email: string): Promise<void>;
|
|
58
|
+
/** Return accounts from cache — load once, reuse until configChanged. */
|
|
59
|
+
private getCachedAccounts;
|
|
60
|
+
getAccounts(): any[];
|
|
61
|
+
getFolders(accountId: string): Folder[];
|
|
62
|
+
getUnifiedInbox(page?: number, pageSize?: number): any;
|
|
63
|
+
getMessages(accountId: string, folderId: number, page?: number, pageSize?: number, sort?: string, sortDir?: string, search?: string, flaggedOnly?: boolean): any;
|
|
64
|
+
getMessage(accountId: string, uid: number, allowRemote?: boolean, folderId?: number): Promise<any>;
|
|
65
|
+
/** RFC 8058 one-click unsubscribe: POST `List-Unsubscribe=One-Click` to the
|
|
66
|
+
* HTTPS URL the message's List-Unsubscribe header advertised. Done server-
|
|
67
|
+
* side because the unsubscribe endpoint usually doesn't set CORS headers,
|
|
68
|
+
* so a browser-side fetch would be blocked. */
|
|
69
|
+
unsubscribeOneClick(url: string): Promise<{
|
|
70
|
+
ok: boolean;
|
|
71
|
+
status: number;
|
|
72
|
+
statusText: string;
|
|
73
|
+
}>;
|
|
74
|
+
/** Per-session map: editId → temp file path + watcher cleanup.
|
|
75
|
+
* Lives in memory only — cleared when the user closes compose or sends. */
|
|
76
|
+
private wordEdits;
|
|
77
|
+
/** Hand the current compose body off to Microsoft Word for editing. Writes
|
|
78
|
+
* the HTML to `~/.mailx/external-edit/<editId>.html`, opens it via the
|
|
79
|
+
* default OS handler (Word on Windows when .html is associated; otherwise
|
|
80
|
+
* the user's chosen editor for HTML), and starts an fs.watch that emits
|
|
81
|
+
* `wordEditUpdated` when Word saves. The compose UI listens for that
|
|
82
|
+
* event and reloads the editor.
|
|
83
|
+
*
|
|
84
|
+
* Windows-only by current default — on Mac/Linux there's no equivalent
|
|
85
|
+
* reliable round-trip. The compose toolbar should hide the button on
|
|
86
|
+
* non-win32 platforms. */
|
|
87
|
+
openInWord(editId: string, html: string): Promise<{
|
|
88
|
+
ok: boolean;
|
|
89
|
+
path: string;
|
|
90
|
+
opener: string;
|
|
91
|
+
}>;
|
|
92
|
+
/** End external editing. Stops the watcher, removes the temp file.
|
|
93
|
+
* Caller is the compose UI when the user closes the window or sends. */
|
|
94
|
+
closeWordEdit(editId: string): Promise<void>;
|
|
95
|
+
updateFlags(accountId: string, uid: number, flags: string[]): Promise<void>;
|
|
96
|
+
allowRemoteContent(type: "sender" | "domain" | "recipient", value: string): Promise<void>;
|
|
97
|
+
/** Domain-reputation cache. Lookups are fast (~50ms each, three in
|
|
98
|
+
* parallel) but we still don't want to redo them on every render of
|
|
99
|
+
* the same sender's mail. Five-minute TTL — long enough that scrolling
|
|
100
|
+
* a folder fans out one query set, short enough that a newly-listed
|
|
101
|
+
* domain surfaces within minutes. */
|
|
102
|
+
private reputationCache;
|
|
103
|
+
private static readonly REPUTATION_TTL_MS;
|
|
104
|
+
private static readonly REPUTATION_TIMEOUT_MS;
|
|
105
|
+
/** Check a domain against three free no-key DNS blocklists in parallel:
|
|
106
|
+
*
|
|
107
|
+
* Spamhaus DBL — `<d>.dbl.spamhaus.org` spam/phish/malware
|
|
108
|
+
* SURBL multi — `<d>.multi.surbl.org` mixed (ph/mw/abuse)
|
|
109
|
+
* URIBL multi — `<d>.multi.uribl.com` black/grey/red lists
|
|
110
|
+
*
|
|
111
|
+
* Each lookup is bounded at 500 ms; missing/slow services are treated
|
|
112
|
+
* as "unknown" (don't poison the cache). Returns the aggregate plus
|
|
113
|
+
* the per-service detail so the UI can show "N of 3 services flag
|
|
114
|
+
* this domain" with the contributing source list.
|
|
115
|
+
*
|
|
116
|
+
* Privacy: each query leaks the bare domain to that DNSBL's
|
|
117
|
+
* infrastructure plus the user's local resolver. Opt-in via Settings.
|
|
118
|
+
*
|
|
119
|
+
* No API keys, free for personal use across all three services. */
|
|
120
|
+
checkDomainReputation(domain: string): Promise<ReputationResult | null>;
|
|
121
|
+
/** Mark a sender or domain as suspect. Surfaced in the remote-content
|
|
122
|
+
* banner as a red warning on subsequent messages. Toggle: calling with
|
|
123
|
+
* the same value removes it. Returns the new state for UI feedback. */
|
|
124
|
+
flagSenderOrDomain(type: "sender" | "domain", value: string): Promise<{
|
|
125
|
+
flagged: boolean;
|
|
126
|
+
}>;
|
|
127
|
+
search(q: string, page?: number, pageSize?: number, scope?: string, accountId?: string, folderId?: number): Promise<any>;
|
|
128
|
+
rebuildSearchIndex(): number;
|
|
129
|
+
getSyncPending(): {
|
|
130
|
+
pending: number;
|
|
131
|
+
};
|
|
132
|
+
/** Outbox queue depth + retry status for the UI status bar. Cheap to call. */
|
|
133
|
+
getOutboxStatus(): any;
|
|
134
|
+
/** Per-account health snapshot: inactivity-timeout count, conn-cap hits,
|
|
135
|
+
* last failed IMAP command. Drives the diagnostics ⚠ badge in the UI. */
|
|
136
|
+
getDiagnostics(): any;
|
|
137
|
+
/** Return the account that supplies `feature` data (calendar / tasks /
|
|
138
|
+
* contacts). Resolution order:
|
|
139
|
+
* 1. Any account with `primary<Feature>: true` (per-feature override)
|
|
140
|
+
* 2. Any account with `primary: true` (catch-all default)
|
|
141
|
+
* 3. First account (fallback)
|
|
142
|
+
* Called without `feature` it returns the catch-all primary — same
|
|
143
|
+
* semantics as the original single-flag version for back-compat. */
|
|
144
|
+
getPrimaryAccount(feature?: string): any;
|
|
145
|
+
/** Feature names that have already emitted authScopeError this session.
|
|
146
|
+
* Stops the "banner flashing on and off continually" loop where every
|
|
147
|
+
* 5-min poll / sidebar nav re-fired the event and the client re-rendered
|
|
148
|
+
* the red banner. Cleared when the user hits Re-authenticate. */
|
|
149
|
+
private scopeErrorEmitted;
|
|
150
|
+
/** Quota cooldown — feature → epoch-ms when the next API call is allowed.
|
|
151
|
+
* Set when Google returns 429 (rate limit / daily-quota exceeded). While
|
|
152
|
+
* cooldown is in effect, getCalendarEvents/getTasks return local DB rows
|
|
153
|
+
* without firing a refresh. Heuristic cooldown is one hour; the daily
|
|
154
|
+
* Google Tasks quota actually resets at Pacific midnight, but a one-hour
|
|
155
|
+
* short-circuit keeps the log clean and avoids hammering after a burst. */
|
|
156
|
+
private quotaCooldown;
|
|
157
|
+
/** Sticky "quota exceeded" emit guard — same shape as scopeErrorEmitted. */
|
|
158
|
+
private quotaErrorEmitted;
|
|
159
|
+
/** In-flight refresh promises keyed by feature, so concurrent UI calls
|
|
160
|
+
* share one Google round-trip instead of stacking N parallel fetches.
|
|
161
|
+
* The fire-and-forget loop where `tasksUpdated` re-triggers `getTasks`
|
|
162
|
+
* used to spawn a new refresh on every event RTT — this dedupes them. */
|
|
163
|
+
private refreshingCalendar;
|
|
164
|
+
private refreshingTasks;
|
|
165
|
+
/** Delete the cached Google OAuth token (the one used for Calendar / Tasks
|
|
166
|
+
* / Contacts scopes — NOT the IMAP token which `reauthenticate()` handles)
|
|
167
|
+
* and clear the sticky auth-error state so a subsequent refresh can
|
|
168
|
+
* re-trigger browser consent with the current scope set. Equivalent of
|
|
169
|
+
* `mailx -reauth` but callable from the UI. Returns `{ cleared: N }` so
|
|
170
|
+
* the caller can tell the user what happened. */
|
|
171
|
+
reauthGoogleScopes(): {
|
|
172
|
+
cleared: number;
|
|
173
|
+
};
|
|
174
|
+
private primaryTokenProvider;
|
|
175
|
+
/** Return cal events visible in [fromMs..toMs), refreshing from Google
|
|
176
|
+
* in the background. Caller displays local results immediately; after
|
|
177
|
+
* the refresh completes the service emits `calendarUpdated` so the UI
|
|
178
|
+
* re-renders with pulled-in rows. Fire-and-forget-with-event, not
|
|
179
|
+
* fire-and-forget-and-pray. */
|
|
180
|
+
getCalendarEvents(fromMs: number, toMs: number): Promise<any[]>;
|
|
181
|
+
/** Returns true if the feature is currently in a quota-exceeded cooldown. */
|
|
182
|
+
private inQuotaCooldown;
|
|
183
|
+
/** Single error-handling path for Google refresh failures.
|
|
184
|
+
* Distinguishes 429 (quota) from 401/403 (scope) so each gets the right
|
|
185
|
+
* cooldown + sticky-emit treatment without duplicating the regex blocks. */
|
|
186
|
+
private handleGoogleRefreshError;
|
|
187
|
+
/** Pull events in [fromMs..toMs) from Google, upsert locally, reconcile
|
|
188
|
+
* server-side deletions. Returns true if anything changed so callers
|
|
189
|
+
* can decide whether to emit a refresh event. `changed` is only true
|
|
190
|
+
* when at least one row's data actually differs — without this guard
|
|
191
|
+
* the UI's `calendarUpdated` listener re-triggers `getCalendarEvents`,
|
|
192
|
+
* which fires another `refreshCalendarEvents`, which emits again, etc.
|
|
193
|
+
* Tight loop = 429 quota burn. */
|
|
194
|
+
private refreshCalendarEvents;
|
|
195
|
+
createCalendarEventLocal(ev: {
|
|
196
|
+
title: string;
|
|
197
|
+
startMs: number;
|
|
198
|
+
endMs: number;
|
|
199
|
+
allDay?: boolean;
|
|
200
|
+
location?: string;
|
|
201
|
+
notes?: string;
|
|
202
|
+
}): Promise<string>;
|
|
203
|
+
updateCalendarEventLocal(uuid: string, patch: {
|
|
204
|
+
title?: string;
|
|
205
|
+
startMs?: number;
|
|
206
|
+
endMs?: number;
|
|
207
|
+
allDay?: boolean;
|
|
208
|
+
location?: string;
|
|
209
|
+
notes?: string;
|
|
210
|
+
}): Promise<void>;
|
|
211
|
+
deleteCalendarEventLocal(uuid: string): Promise<void>;
|
|
212
|
+
getTasks(includeCompleted?: boolean): Promise<any[]>;
|
|
213
|
+
private refreshTasks;
|
|
214
|
+
createTaskLocal(t: {
|
|
215
|
+
title: string;
|
|
216
|
+
notes?: string;
|
|
217
|
+
dueMs?: number;
|
|
218
|
+
}): Promise<string>;
|
|
219
|
+
updateTaskLocal(uuid: string, patch: {
|
|
220
|
+
title?: string;
|
|
221
|
+
notes?: string;
|
|
222
|
+
dueMs?: number;
|
|
223
|
+
completedMs?: number;
|
|
224
|
+
}): Promise<void>;
|
|
225
|
+
deleteTaskLocal(uuid: string): Promise<void>;
|
|
226
|
+
/** Drain the store_sync queue — calendar / tasks / contacts push-to-server.
|
|
227
|
+
* Called on every local edit, and on a periodic tick from the outbox worker. */
|
|
228
|
+
drainStoreSync(): Promise<void>;
|
|
229
|
+
/** List queued outgoing messages with parsed envelope headers so the UI
|
|
230
|
+
* can render a pink-row "pending" view before IMAP APPEND succeeds. */
|
|
231
|
+
listQueuedOutgoing(): any[];
|
|
232
|
+
/** Manually drop a queued message (not yet sent). Removes the .ltr file. */
|
|
233
|
+
cancelQueuedOutgoing(filePath: string): {
|
|
234
|
+
ok: true;
|
|
235
|
+
};
|
|
236
|
+
syncAll(): Promise<void>;
|
|
237
|
+
syncAccount(accountId: string): Promise<void>;
|
|
238
|
+
/** Force re-authentication for an account (deletes token, opens browser consent) */
|
|
239
|
+
reauthenticate(accountId: string): Promise<boolean>;
|
|
240
|
+
send(msg: any): Promise<void>;
|
|
241
|
+
deleteMessage(accountId: string, uid: number): Promise<void>;
|
|
242
|
+
deleteMessages(accountId: string, uids: number[]): Promise<void>;
|
|
243
|
+
moveMessage(accountId: string, uid: number, targetFolderId: number, targetAccountId?: string): Promise<void>;
|
|
244
|
+
moveMessages(accountId: string, uids: number[], targetFolderId: number): Promise<void>;
|
|
245
|
+
/** Move messages to the account's configured spam folder (accounts.jsonc "spam" path).
|
|
246
|
+
* Throws if the account has no spam folder configured or the folder doesn't exist locally. */
|
|
247
|
+
markAsSpamMessages(accountId: string, uids: number[]): Promise<{
|
|
248
|
+
targetFolderId: number;
|
|
249
|
+
moved: number;
|
|
250
|
+
}>;
|
|
251
|
+
/** Append a spam report row to `~/.mailx/spam.csv` — placeholder mechanism
|
|
252
|
+
* per user 2026-04-23 ("let's make it smart later; no auto-delete until
|
|
253
|
+
* safety issues are addressed"). One row per click. Columns: timestamp
|
|
254
|
+
* (ms since epoch), ISO date, ISO time, accountId, Delivered-To, From
|
|
255
|
+
* address, Subject, eml file path. CSV fields RFC 4180-quoted so commas
|
|
256
|
+
* and quotes in subjects survive. No move, no flag change, no server
|
|
257
|
+
* hit — just the log. Useful as training data for a future classifier.
|
|
258
|
+
*/
|
|
259
|
+
recordSpamReport(accountId: string, uid: number, folderId: number): Promise<{
|
|
260
|
+
ok: true;
|
|
261
|
+
row: string;
|
|
262
|
+
}>;
|
|
263
|
+
undeleteMessage(accountId: string, uid: number, folderId: number): Promise<void>;
|
|
264
|
+
deleteOnServer(accountId: string, folderPath: string, uid: number): Promise<void>;
|
|
265
|
+
createFolder(accountId: string, parentPath: string, name: string): Promise<void>;
|
|
266
|
+
renameFolder(accountId: string, folderId: number, newName: string): Promise<void>;
|
|
267
|
+
deleteFolder(accountId: string, folderId: number): Promise<void>;
|
|
268
|
+
markFolderRead(folderId: number): void;
|
|
269
|
+
emptyFolder(accountId: string, folderId: number): Promise<void>;
|
|
270
|
+
getAttachment(accountId: string, uid: number, attachmentId: number, folderId?: number): Promise<{
|
|
271
|
+
content: Buffer;
|
|
272
|
+
contentType: string;
|
|
273
|
+
filename: string;
|
|
274
|
+
}>;
|
|
275
|
+
saveDraft(accountId: string, subject: string, bodyHtml: string, bodyText: string, to?: string, cc?: string, previousDraftUid?: number, draftId?: string): Promise<{
|
|
276
|
+
draftUid: number | null;
|
|
277
|
+
draftId: string;
|
|
278
|
+
}>;
|
|
279
|
+
deleteDraft(accountId: string, draftUid: number, draftId?: string): Promise<void>;
|
|
280
|
+
searchContacts(query: string): any[];
|
|
281
|
+
/** Q49: boolean hint for compose to auto-expand Cc when replying to this
|
|
282
|
+
* address. True when at least one past sent message to the same recipient
|
|
283
|
+
* had a non-empty Cc field. */
|
|
284
|
+
hasCcHistoryTo(email: string): boolean;
|
|
285
|
+
/** Q49: same shape, for Bcc. Sent folder is the only place Bcc appears,
|
|
286
|
+
* so the signal is local-only but still reflects the user's habit. */
|
|
287
|
+
hasBccHistoryTo(email: string): boolean;
|
|
288
|
+
syncGoogleContacts(): Promise<void>;
|
|
289
|
+
seedContacts(): number;
|
|
290
|
+
/** Explicit add to address book — used by the right-click "Add to contacts"
|
|
291
|
+
* action on From/To/Cc addresses in the message viewer. Just calls the same
|
|
292
|
+
* validated upsert path as recordSentAddress. */
|
|
293
|
+
addContact(name: string, email: string): boolean;
|
|
294
|
+
/** Address-book listing — paginated, filterable. */
|
|
295
|
+
listContacts(query: string, page?: number, pageSize?: number): any;
|
|
296
|
+
/** Upsert a contact from the address book UI (edit name). Two-way cache:
|
|
297
|
+
* commits locally, queues a Google People push. */
|
|
298
|
+
upsertContact(name: string, email: string): {
|
|
299
|
+
ok: true;
|
|
300
|
+
};
|
|
301
|
+
/** Delete a contact from the address book. Also pushes the deletion to
|
|
302
|
+
* Google People if the contact had a resourceName (i.e. was synced). */
|
|
303
|
+
deleteContact(email: string): {
|
|
304
|
+
ok: true;
|
|
305
|
+
};
|
|
306
|
+
/** Open a configured local path in the OS file explorer. Whitelisted to
|
|
307
|
+
* avoid the UI poking at arbitrary paths. */
|
|
308
|
+
openLocalPath(which: "config" | "log"): Promise<{
|
|
309
|
+
ok: true;
|
|
310
|
+
path: string;
|
|
311
|
+
}>;
|
|
312
|
+
/** Get all messages in a thread (across folders) for an account. */
|
|
313
|
+
getThreadMessages(accountId: string, threadId: string): any;
|
|
314
|
+
/** Read a JSONC config file from the shared cloud dir or local ~/.mailx.
|
|
315
|
+
* Names are whitelisted so the UI can't read arbitrary files.
|
|
316
|
+
* `config.jsonc` is the local per-machine config (not cloud-synced). */
|
|
317
|
+
readJsoncFile(name: string): Promise<string | null>;
|
|
318
|
+
formatJsonc(content: string): Promise<string>;
|
|
319
|
+
/** Return the help section for a named config file, extracted from docs/config-help.md.
|
|
320
|
+
* Matches a level-2 heading whose text equals the filename. Returns markdown. */
|
|
321
|
+
readConfigHelp(name: string): Promise<string>;
|
|
322
|
+
/** Write a JSONC config file. Validates that the content parses as JSONC
|
|
323
|
+
* (loosely — strips comments/trailing commas) before writing.
|
|
324
|
+
* Saves the prior content to a dated backup file first — manual edits
|
|
325
|
+
* occasionally have typos that survive validation (semantically wrong
|
|
326
|
+
* but syntactically OK), and a one-key undo isn't enough; the user
|
|
327
|
+
* asked to be able to recover yesterday's accounts.jsonc. Automatic
|
|
328
|
+
* saveAccounts/saveAllowlist paths skip backups (they're driven by
|
|
329
|
+
* trusted code, not the JSONC editor). */
|
|
330
|
+
writeJsoncFile(name: string, content: string): Promise<void>;
|
|
331
|
+
/** Read the current content of a config file (cloud or local) so it can
|
|
332
|
+
* be saved as a backup before being overwritten. Returns null if the
|
|
333
|
+
* file doesn't exist yet (first save — nothing to back up). */
|
|
334
|
+
private readJsoncForBackup;
|
|
335
|
+
/** Write the prior content to `<configDir>/backup/<name>.<ts>.bak` and
|
|
336
|
+
* prune so at most 10 backups per file remain AND none are older than 7
|
|
337
|
+
* days. Skipped when previous content is null (first write) or
|
|
338
|
+
* identical to the new content (no-op save). */
|
|
339
|
+
private backupJsoncIfChanged;
|
|
340
|
+
getSettings(): any;
|
|
341
|
+
saveSettings(settings: any): void;
|
|
342
|
+
getStorageInfo(): {
|
|
343
|
+
provider: string;
|
|
344
|
+
mode: string;
|
|
345
|
+
};
|
|
346
|
+
setupAccount(name: string, email: string, password?: string): Promise<{
|
|
347
|
+
ok: boolean;
|
|
348
|
+
error?: string;
|
|
349
|
+
message?: string;
|
|
350
|
+
}>;
|
|
351
|
+
repairAccounts(): Promise<{
|
|
352
|
+
ok: boolean;
|
|
353
|
+
error?: string;
|
|
354
|
+
message?: string;
|
|
355
|
+
}>;
|
|
356
|
+
getAutocompleteSettings(): AutocompleteSettings;
|
|
357
|
+
saveAutocompleteSettings(settings: AutocompleteSettings): void;
|
|
358
|
+
autocomplete(req: AutocompleteRequest): Promise<AutocompleteResponse>;
|
|
359
|
+
/** Generic AI text transform — translate / proofread / summarize.
|
|
360
|
+
* Shares the autocomplete provider config (provider, key, model). Each
|
|
361
|
+
* feature has its own opt-in toggle (translateEnabled / proofreadEnabled),
|
|
362
|
+
* default false. Returns empty text + reason when disabled or on error. */
|
|
363
|
+
aiTransform(req: AiTransformRequest): Promise<AiTransformResponse>;
|
|
364
|
+
}
|
|
365
|
+
export {};
|
|
366
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|