proton-mail-bridge-client 1.11.0

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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +445 -0
  3. package/dist/cli.d.ts +12 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +1627 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +56 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +3173 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/scripts/bridge-smoke.d.ts +2 -0
  12. package/dist/scripts/bridge-smoke.d.ts.map +1 -0
  13. package/dist/scripts/bridge-smoke.js +415 -0
  14. package/dist/scripts/bridge-smoke.js.map +1 -0
  15. package/dist/scripts/check-claude-desktop.d.ts +17 -0
  16. package/dist/scripts/check-claude-desktop.d.ts.map +1 -0
  17. package/dist/scripts/check-claude-desktop.js +138 -0
  18. package/dist/scripts/check-claude-desktop.js.map +1 -0
  19. package/dist/scripts/install-claude-desktop.d.ts +39 -0
  20. package/dist/scripts/install-claude-desktop.d.ts.map +1 -0
  21. package/dist/scripts/install-claude-desktop.js +257 -0
  22. package/dist/scripts/install-claude-desktop.js.map +1 -0
  23. package/dist/scripts/setup-claude-desktop.d.ts +15 -0
  24. package/dist/scripts/setup-claude-desktop.d.ts.map +1 -0
  25. package/dist/scripts/setup-claude-desktop.js +187 -0
  26. package/dist/scripts/setup-claude-desktop.js.map +1 -0
  27. package/dist/services/analytics-service.d.ts +45 -0
  28. package/dist/services/analytics-service.d.ts.map +1 -0
  29. package/dist/services/analytics-service.js +189 -0
  30. package/dist/services/analytics-service.js.map +1 -0
  31. package/dist/services/audit-service.d.ts +13 -0
  32. package/dist/services/audit-service.d.ts.map +1 -0
  33. package/dist/services/audit-service.js +67 -0
  34. package/dist/services/audit-service.js.map +1 -0
  35. package/dist/services/background-sync-service.d.ts +28 -0
  36. package/dist/services/background-sync-service.d.ts.map +1 -0
  37. package/dist/services/background-sync-service.js +216 -0
  38. package/dist/services/background-sync-service.js.map +1 -0
  39. package/dist/services/draft-store-service.d.ts +59 -0
  40. package/dist/services/draft-store-service.d.ts.map +1 -0
  41. package/dist/services/draft-store-service.js +251 -0
  42. package/dist/services/draft-store-service.js.map +1 -0
  43. package/dist/services/local-index-service.d.ts +90 -0
  44. package/dist/services/local-index-service.d.ts.map +1 -0
  45. package/dist/services/local-index-service.js +1462 -0
  46. package/dist/services/local-index-service.js.map +1 -0
  47. package/dist/services/simple-imap-service.d.ts +209 -0
  48. package/dist/services/simple-imap-service.d.ts.map +1 -0
  49. package/dist/services/simple-imap-service.js +1100 -0
  50. package/dist/services/simple-imap-service.js.map +1 -0
  51. package/dist/services/smtp-service.d.ts +15 -0
  52. package/dist/services/smtp-service.d.ts.map +1 -0
  53. package/dist/services/smtp-service.js +100 -0
  54. package/dist/services/smtp-service.js.map +1 -0
  55. package/dist/types/index.d.ts +355 -0
  56. package/dist/types/index.d.ts.map +1 -0
  57. package/dist/types/index.js +2 -0
  58. package/dist/types/index.js.map +1 -0
  59. package/dist/utils/helpers.d.ts +45 -0
  60. package/dist/utils/helpers.d.ts.map +1 -0
  61. package/dist/utils/helpers.js +393 -0
  62. package/dist/utils/helpers.js.map +1 -0
  63. package/dist/utils/logger.d.ts +22 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +91 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/dist/utils/runtime-policy.d.ts +12 -0
  68. package/dist/utils/runtime-policy.d.ts.map +1 -0
  69. package/dist/utils/runtime-policy.js +62 -0
  70. package/dist/utils/runtime-policy.js.map +1 -0
  71. package/glama.json +6 -0
  72. package/package.json +91 -0
@@ -0,0 +1,257 @@
1
+ import { execFile } from "node:child_process";
2
+ import { constants as fsConstants } from "node:fs";
3
+ import { access, copyFile, cp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ import { promisify } from "node:util";
8
+ const DEFAULT_SERVER_NAME = "proton-mail-bridge";
9
+ const execFileAsync = promisify(execFile);
10
+ function parseCliArgs(argv) {
11
+ const options = {};
12
+ for (let index = 0; index < argv.length; index += 1) {
13
+ const token = argv[index];
14
+ const next = argv[index + 1];
15
+ switch (token) {
16
+ case "--config-path":
17
+ if (!next) {
18
+ throw new Error("--config-path requires a value.");
19
+ }
20
+ options.configPath = next;
21
+ index += 1;
22
+ break;
23
+ case "--server-name":
24
+ if (!next) {
25
+ throw new Error("--server-name requires a value.");
26
+ }
27
+ options.serverName = next;
28
+ index += 1;
29
+ break;
30
+ case "--cwd":
31
+ if (!next) {
32
+ throw new Error("--cwd requires a value.");
33
+ }
34
+ options.cwd = next;
35
+ index += 1;
36
+ break;
37
+ case "--runtime-dir":
38
+ if (!next) {
39
+ throw new Error("--runtime-dir requires a value.");
40
+ }
41
+ options.runtimeDir = next;
42
+ index += 1;
43
+ break;
44
+ case "--command":
45
+ if (!next) {
46
+ throw new Error("--command requires a value.");
47
+ }
48
+ options.command = next;
49
+ index += 1;
50
+ break;
51
+ case "--use-repo-build":
52
+ options.useRepoRuntime = true;
53
+ break;
54
+ case "--no-env":
55
+ options.includeEnv = false;
56
+ break;
57
+ case "--help":
58
+ case "-h":
59
+ printHelp();
60
+ process.exit(0);
61
+ default:
62
+ throw new Error(`Unknown argument: ${token}`);
63
+ }
64
+ }
65
+ return options;
66
+ }
67
+ function printHelp() {
68
+ process.stdout.write([
69
+ "Usage: node dist/scripts/install-claude-desktop.js [options]",
70
+ "",
71
+ "Options:",
72
+ " --config-path <path> Override Claude Desktop config path",
73
+ " --server-name <name> MCP server key to write (default: proton-mail-bridge)",
74
+ " --cwd <path> Repo root to stage the MCP runtime from",
75
+ " --runtime-dir <path> Stable runtime directory used by Claude Desktop",
76
+ " --command <path> Node executable to use (default: current process.execPath)",
77
+ " --use-repo-build Point Claude Desktop at the current repo build instead of a stable runtime copy",
78
+ " --no-env Do not copy current PROTONMAIL_* / DEBUG env into config",
79
+ ].join("\n"));
80
+ }
81
+ function resolveSourceRepoRoot(explicitPath) {
82
+ return resolve(explicitPath || join(dirname(fileURLToPath(import.meta.url)), "..", ".."));
83
+ }
84
+ export function resolveClaudeDesktopConfigPath(explicitPath) {
85
+ if (explicitPath?.trim()) {
86
+ return resolve(explicitPath);
87
+ }
88
+ const fromEnv = process.env.CLAUDE_DESKTOP_CONFIG_PATH?.trim();
89
+ if (fromEnv) {
90
+ return resolve(fromEnv);
91
+ }
92
+ switch (process.platform) {
93
+ case "darwin":
94
+ return join(homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
95
+ case "win32":
96
+ return join(process.env.APPDATA || join(homedir(), "AppData", "Roaming"), "Claude", "claude_desktop_config.json");
97
+ default:
98
+ return join(homedir(), ".config", "Claude", "claude_desktop_config.json");
99
+ }
100
+ }
101
+ export function resolveClaudeDesktopRuntimeDir(explicitPath) {
102
+ if (explicitPath?.trim()) {
103
+ return resolve(explicitPath);
104
+ }
105
+ const fromEnv = process.env.PROTONMAIL_CLAUDE_RUNTIME_DIR?.trim();
106
+ if (fromEnv) {
107
+ return resolve(fromEnv);
108
+ }
109
+ switch (process.platform) {
110
+ case "darwin":
111
+ return join(homedir(), "Library", "Application Support", "Proton Mail Bridge Client");
112
+ case "win32":
113
+ return join(process.env.APPDATA || join(homedir(), "AppData", "Roaming"), "Proton Mail Bridge Client");
114
+ default:
115
+ return join(homedir(), ".local", "share", "proton-mail-bridge-client");
116
+ }
117
+ }
118
+ export function collectInstallEnv(sourceEnv = process.env) {
119
+ return Object.fromEntries(Object.entries(sourceEnv).filter(([key, value]) => Boolean(value) && (key.startsWith("PROTONMAIL_") || key === "DEBUG")));
120
+ }
121
+ export function buildClaudeDesktopServerConfig(options = {}) {
122
+ const cwd = resolve(options.runtimeDir || options.cwd || resolveSourceRepoRoot());
123
+ const command = options.command || process.execPath;
124
+ const env = options.includeEnv === false
125
+ ? undefined
126
+ : {
127
+ ...collectInstallEnv(),
128
+ ...(options.env ?? {}),
129
+ };
130
+ return {
131
+ serverName: options.serverName || DEFAULT_SERVER_NAME,
132
+ serverConfig: {
133
+ command,
134
+ args: [join(cwd, "dist", "index.js")],
135
+ cwd,
136
+ ...(env && Object.keys(env).length > 0 ? { env } : {}),
137
+ },
138
+ };
139
+ }
140
+ function getNpmExecutable() {
141
+ return process.platform === "win32" ? "npm.cmd" : "npm";
142
+ }
143
+ async function installRuntimeDependencies(runtimeDir) {
144
+ // On Windows, .cmd files (npm.cmd) require shell: true — execFile cannot run them directly.
145
+ const shellOpts = process.platform === "win32" ? { shell: true } : {};
146
+ await execFileAsync(getNpmExecutable(), ["ci", "--omit=dev", "--ignore-scripts"], {
147
+ cwd: runtimeDir,
148
+ env: process.env,
149
+ ...shellOpts,
150
+ });
151
+ // better-sqlite3 is native; rebuild it in the staged runtime so Claude Desktop
152
+ // gets the correct binary for the current machine instead of whatever was built elsewhere.
153
+ await execFileAsync(getNpmExecutable(), ["rebuild", "better-sqlite3"], {
154
+ cwd: runtimeDir,
155
+ env: process.env,
156
+ ...shellOpts,
157
+ });
158
+ }
159
+ export async function prepareClaudeDesktopRuntime(options = {}) {
160
+ const sourceCwd = resolveSourceRepoRoot(options.cwd);
161
+ const runtimeDir = options.useRepoRuntime ? sourceCwd : resolveClaudeDesktopRuntimeDir(options.runtimeDir);
162
+ if (options.useRepoRuntime || runtimeDir === sourceCwd) {
163
+ return {
164
+ runtimeDir,
165
+ sourceCwd,
166
+ usedRepoRuntime: true,
167
+ };
168
+ }
169
+ await mkdir(runtimeDir, { recursive: true });
170
+ await rm(join(runtimeDir, "dist"), { recursive: true, force: true });
171
+ await cp(join(sourceCwd, "dist"), join(runtimeDir, "dist"), { recursive: true, force: true });
172
+ await copyFile(join(sourceCwd, "package.json"), join(runtimeDir, "package.json"));
173
+ await copyFile(join(sourceCwd, "package-lock.json"), join(runtimeDir, "package-lock.json"));
174
+ await installRuntimeDependencies(runtimeDir);
175
+ return {
176
+ runtimeDir,
177
+ sourceCwd,
178
+ usedRepoRuntime: false,
179
+ };
180
+ }
181
+ export function mergeClaudeDesktopConfig(existing, serverName, serverConfig) {
182
+ const existingServers = existing.mcpServers && typeof existing.mcpServers === "object" && !Array.isArray(existing.mcpServers)
183
+ ? existing.mcpServers
184
+ : {};
185
+ return {
186
+ ...existing,
187
+ mcpServers: {
188
+ ...existingServers,
189
+ [serverName]: serverConfig,
190
+ },
191
+ };
192
+ }
193
+ async function readExistingConfig(configPath) {
194
+ try {
195
+ const raw = await readFile(configPath, "utf8");
196
+ const parsed = JSON.parse(raw);
197
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
198
+ throw new Error(`Claude Desktop config at ${configPath} must contain a JSON object.`);
199
+ }
200
+ return parsed;
201
+ }
202
+ catch (error) {
203
+ if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") {
204
+ return {};
205
+ }
206
+ throw error;
207
+ }
208
+ }
209
+ async function backupConfigIfPresent(configPath) {
210
+ try {
211
+ await access(configPath, fsConstants.F_OK);
212
+ const backupPath = `${configPath}.bak-${new Date().toISOString().replace(/[:.]/g, "-")}`;
213
+ await copyFile(configPath, backupPath);
214
+ return backupPath;
215
+ }
216
+ catch (error) {
217
+ if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") {
218
+ return undefined;
219
+ }
220
+ throw error;
221
+ }
222
+ }
223
+ export async function installClaudeDesktopConfig(options = {}) {
224
+ const configPath = resolveClaudeDesktopConfigPath(options.configPath);
225
+ const existing = await readExistingConfig(configPath);
226
+ const runtime = await prepareClaudeDesktopRuntime(options);
227
+ const { serverName, serverConfig } = buildClaudeDesktopServerConfig({
228
+ ...options,
229
+ runtimeDir: runtime.runtimeDir,
230
+ });
231
+ const merged = mergeClaudeDesktopConfig(existing, serverName, serverConfig);
232
+ await mkdir(dirname(configPath), { recursive: true });
233
+ const backupPath = await backupConfigIfPresent(configPath);
234
+ await writeFile(configPath, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
235
+ return {
236
+ configPath,
237
+ backupPath,
238
+ serverName,
239
+ serverConfig,
240
+ runtimeDir: runtime.runtimeDir,
241
+ sourceCwd: runtime.sourceCwd,
242
+ usedRepoRuntime: runtime.usedRepoRuntime,
243
+ };
244
+ }
245
+ async function main() {
246
+ const options = parseCliArgs(process.argv.slice(2));
247
+ const result = await installClaudeDesktopConfig(options);
248
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
249
+ }
250
+ const isDirectExecution = process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url);
251
+ if (isDirectExecution) {
252
+ main().catch((error) => {
253
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
254
+ process.exitCode = 1;
255
+ });
256
+ }
257
+ //# sourceMappingURL=install-claude-desktop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-claude-desktop.js","sourceRoot":"","sources":["../../src/scripts/install-claude-desktop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface WizardAnswers {
2
+ username: string;
3
+ password: string;
4
+ imapHost?: string;
5
+ imapPort?: number;
6
+ smtpHost?: string;
7
+ smtpPort?: number;
8
+ dataDir?: string;
9
+ }
10
+ export declare function parseYesNoAnswer(value: string, defaultValue: boolean): boolean;
11
+ export declare function normalizePortInput(value: string, fallback: number): number;
12
+ export declare function buildWizardEnv(answers: WizardAnswers): Record<string, string>;
13
+ export declare function probePort(host: string, port: number, timeoutMs?: number): Promise<boolean>;
14
+ export declare function runClaudeDesktopSetupWizard(): Promise<void>;
15
+ //# sourceMappingURL=setup-claude-desktop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-claude-desktop.d.ts","sourceRoot":"","sources":["../../src/scripts/setup-claude-desktop.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAgB9E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB7E;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB7F;AA2DD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CA2FjE"}
@@ -0,0 +1,187 @@
1
+ import { homedir } from "node:os";
2
+ import { join, resolve } from "node:path";
3
+ import { stdin as input, stdout as output } from "node:process";
4
+ import { Socket } from "node:net";
5
+ import { createInterface } from "node:readline/promises";
6
+ import { fileURLToPath } from "node:url";
7
+ import { installClaudeDesktopConfig, resolveClaudeDesktopConfigPath, } from "./install-claude-desktop.js";
8
+ const DEFAULT_IMAP_HOST = "127.0.0.1";
9
+ const DEFAULT_IMAP_PORT = 1143;
10
+ const DEFAULT_SMTP_HOST = "127.0.0.1";
11
+ const DEFAULT_SMTP_PORT = 1025;
12
+ const DEFAULT_DATA_DIR = join(homedir(), ".proton-mail-bridge-client");
13
+ const DEFAULT_ALLOWED_ACTIONS = "mark_read,mark_unread,star,unstar,archive,trash,restore";
14
+ export function parseYesNoAnswer(value, defaultValue) {
15
+ const normalized = value.trim().toLowerCase();
16
+ if (!normalized) {
17
+ return defaultValue;
18
+ }
19
+ if (["y", "yes", "true", "1"].includes(normalized)) {
20
+ return true;
21
+ }
22
+ if (["n", "no", "false", "0"].includes(normalized)) {
23
+ return false;
24
+ }
25
+ throw new Error(`Expected yes or no, received: ${value}`);
26
+ }
27
+ export function normalizePortInput(value, fallback) {
28
+ const normalized = value.trim();
29
+ if (!normalized) {
30
+ return fallback;
31
+ }
32
+ const parsed = Number.parseInt(normalized, 10);
33
+ if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 65535) {
34
+ throw new Error(`Invalid port: ${value}`);
35
+ }
36
+ return parsed;
37
+ }
38
+ export function buildWizardEnv(answers) {
39
+ return {
40
+ PROTONMAIL_USERNAME: answers.username.trim(),
41
+ PROTONMAIL_PASSWORD: answers.password,
42
+ PROTONMAIL_IMAP_HOST: answers.imapHost?.trim() || DEFAULT_IMAP_HOST,
43
+ PROTONMAIL_IMAP_PORT: String(answers.imapPort || DEFAULT_IMAP_PORT),
44
+ PROTONMAIL_IMAP_SECURE: "false",
45
+ PROTONMAIL_SMTP_HOST: answers.smtpHost?.trim() || DEFAULT_SMTP_HOST,
46
+ PROTONMAIL_SMTP_PORT: String(answers.smtpPort || DEFAULT_SMTP_PORT),
47
+ PROTONMAIL_DATA_DIR: answers.dataDir?.trim() || DEFAULT_DATA_DIR,
48
+ PROTONMAIL_AUTO_SYNC: "true",
49
+ PROTONMAIL_STARTUP_SYNC: "true",
50
+ PROTONMAIL_SYNC_INTERVAL_MINUTES: "5",
51
+ PROTONMAIL_IDLE_WATCH: "true",
52
+ PROTONMAIL_IDLE_MAX_SECONDS: "30",
53
+ PROTONMAIL_READ_ONLY: "false",
54
+ PROTONMAIL_ALLOW_SEND: "true",
55
+ PROTONMAIL_ALLOW_REMOTE_DRAFT_SYNC: "true",
56
+ PROTONMAIL_ALLOWED_ACTIONS: DEFAULT_ALLOWED_ACTIONS,
57
+ };
58
+ }
59
+ export async function probePort(host, port, timeoutMs = 400) {
60
+ return await new Promise((resolve) => {
61
+ const socket = new Socket();
62
+ let finished = false;
63
+ const finish = (result) => {
64
+ if (finished) {
65
+ return;
66
+ }
67
+ finished = true;
68
+ socket.destroy();
69
+ resolve(result);
70
+ };
71
+ socket.setTimeout(timeoutMs);
72
+ socket.once("connect", () => finish(true));
73
+ socket.once("timeout", () => finish(false));
74
+ socket.once("error", () => finish(false));
75
+ socket.connect(port, host);
76
+ });
77
+ }
78
+ async function promptRequired(rl, message, defaultValue = "", showDefault = true) {
79
+ while (true) {
80
+ const suffix = defaultValue && showDefault ? ` [${defaultValue}]` : "";
81
+ const value = (await rl.question(`${message}${suffix}: `)).trim() || defaultValue;
82
+ if (value) {
83
+ return value;
84
+ }
85
+ output.write("This value is required.\n");
86
+ }
87
+ }
88
+ async function promptYesNo(rl, message, defaultValue) {
89
+ while (true) {
90
+ const suffix = defaultValue ? " [Y/n]" : " [y/N]";
91
+ try {
92
+ return parseYesNoAnswer(await rl.question(`${message}${suffix}: `), defaultValue);
93
+ }
94
+ catch (error) {
95
+ output.write(`${error instanceof Error ? error.message : String(error)}\n`);
96
+ }
97
+ }
98
+ }
99
+ async function promptPort(rl, message, fallback) {
100
+ while (true) {
101
+ try {
102
+ return normalizePortInput(await rl.question(`${message} [${fallback}]: `), fallback);
103
+ }
104
+ catch (error) {
105
+ output.write(`${error instanceof Error ? error.message : String(error)}\n`);
106
+ }
107
+ }
108
+ }
109
+ function portFromEnv(rawValue, fallback) {
110
+ if (!rawValue?.trim()) {
111
+ return fallback;
112
+ }
113
+ try {
114
+ return normalizePortInput(rawValue, fallback);
115
+ }
116
+ catch {
117
+ return fallback;
118
+ }
119
+ }
120
+ export async function runClaudeDesktopSetupWizard() {
121
+ if (!input.isTTY || !output.isTTY) {
122
+ throw new Error("setup:claude-desktop needs an interactive terminal. Use npm run install:claude-desktop for a non-interactive install.");
123
+ }
124
+ const imapReachable = await probePort(DEFAULT_IMAP_HOST, DEFAULT_IMAP_PORT);
125
+ const smtpReachable = await probePort(DEFAULT_SMTP_HOST, DEFAULT_SMTP_PORT);
126
+ const defaultConfigPath = resolveClaudeDesktopConfigPath();
127
+ output.write("Proton Mail Bridge Client — Claude Desktop setup\n\n");
128
+ output.write(`Claude Desktop config: ${defaultConfigPath}\n`);
129
+ if (imapReachable || smtpReachable) {
130
+ output.write(`Detected Proton Bridge on localhost (${imapReachable ? "IMAP ok" : "IMAP not detected"}, ${smtpReachable ? "SMTP ok" : "SMTP not detected"}).\n`);
131
+ }
132
+ else {
133
+ output.write("Could not confirm Proton Bridge on 127.0.0.1:1143 / 127.0.0.1:1025. You can still continue with custom values.\n");
134
+ }
135
+ output.write("This wizard installs Proton Mail Bridge Client for Claude Desktop on this computer. It stages a stable local runtime for Claude Desktop to use across chats and workspaces. It does not create a remote URL connector.\n\n");
136
+ const rl = createInterface({ input, output });
137
+ try {
138
+ const username = await promptRequired(rl, "Proton Bridge username", process.env.PROTONMAIL_USERNAME?.trim() || "");
139
+ const password = await promptRequired(rl, "Proton Bridge password (input is visible)", process.env.PROTONMAIL_PASSWORD || "", false);
140
+ const useDefaultBridge = await promptYesNo(rl, "Use standard local Proton Bridge addresses (127.0.0.1:1143 IMAP and 127.0.0.1:1025 SMTP)", true);
141
+ const imapHost = useDefaultBridge
142
+ ? DEFAULT_IMAP_HOST
143
+ : await promptRequired(rl, "IMAP host", process.env.PROTONMAIL_IMAP_HOST || DEFAULT_IMAP_HOST);
144
+ const imapPort = useDefaultBridge
145
+ ? DEFAULT_IMAP_PORT
146
+ : await promptPort(rl, "IMAP port", portFromEnv(process.env.PROTONMAIL_IMAP_PORT, DEFAULT_IMAP_PORT));
147
+ const smtpHost = useDefaultBridge
148
+ ? DEFAULT_SMTP_HOST
149
+ : await promptRequired(rl, "SMTP host", process.env.PROTONMAIL_SMTP_HOST || DEFAULT_SMTP_HOST);
150
+ const smtpPort = useDefaultBridge
151
+ ? DEFAULT_SMTP_PORT
152
+ : await promptPort(rl, "SMTP port", portFromEnv(process.env.PROTONMAIL_SMTP_PORT, DEFAULT_SMTP_PORT));
153
+ const dataDir = await promptRequired(rl, "Local data directory", process.env.PROTONMAIL_DATA_DIR || DEFAULT_DATA_DIR);
154
+ const result = await installClaudeDesktopConfig({
155
+ includeEnv: false,
156
+ env: buildWizardEnv({
157
+ username,
158
+ password,
159
+ imapHost,
160
+ imapPort,
161
+ smtpHost,
162
+ smtpPort,
163
+ dataDir,
164
+ }),
165
+ });
166
+ output.write("\nClaude Desktop setup complete.\n");
167
+ output.write(`- Config written to: ${result.configPath}\n`);
168
+ output.write(`- Claude Desktop runtime installed at: ${result.runtimeDir}\n`);
169
+ if (result.backupPath) {
170
+ output.write(`- Previous config backup: ${result.backupPath}\n`);
171
+ }
172
+ output.write("- Restart Claude Desktop.\n");
173
+ output.write("- Keep Proton Bridge open while using the tools.\n");
174
+ output.write("- If Bridge settings change later, run this wizard again.\n");
175
+ }
176
+ finally {
177
+ rl.close();
178
+ }
179
+ }
180
+ const isDirectExecution = process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url);
181
+ if (isDirectExecution) {
182
+ runClaudeDesktopSetupWizard().catch((error) => {
183
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
184
+ process.exitCode = 1;
185
+ });
186
+ }
187
+ //# sourceMappingURL=setup-claude-desktop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-claude-desktop.js","sourceRoot":"","sources":["../../src/scripts/setup-claude-desktop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { ContactStats, EmailSummary, FolderInfo, VolumeTrendPoint } from "../types/index.js";
2
+ export declare class AnalyticsService {
3
+ clearCache(): void;
4
+ getEmailStats(emails: EmailSummary[], folders: FolderInfo[], ownerEmail?: string): {
5
+ generatedAt: string;
6
+ mailbox: {
7
+ folderCount: number;
8
+ totalMessages: number;
9
+ unreadMessages: number;
10
+ };
11
+ sample: {
12
+ size: number;
13
+ starredMessages: number;
14
+ messagesWithAttachments: number;
15
+ uniqueContacts: number;
16
+ };
17
+ folders: {
18
+ path: string;
19
+ messages: number;
20
+ unseen: number;
21
+ specialUse: string | undefined;
22
+ }[];
23
+ };
24
+ getEmailAnalytics(emails: EmailSummary[], ownerEmail?: string): {
25
+ generatedAt: string;
26
+ sampleSize: number;
27
+ busiestHours: {
28
+ hour: string;
29
+ count: number;
30
+ }[];
31
+ topSenders: {
32
+ address: string;
33
+ count: number;
34
+ }[];
35
+ topDomains: {
36
+ domain: string;
37
+ count: number;
38
+ }[];
39
+ busiestDay: VolumeTrendPoint;
40
+ insights: string[];
41
+ };
42
+ getContacts(emails: EmailSummary[], limit?: number, ownerEmail?: string): ContactStats[];
43
+ getVolumeTrends(emails: EmailSummary[], days?: number): VolumeTrendPoint[];
44
+ }
45
+ //# sourceMappingURL=analytics-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-service.d.ts","sourceRoot":"","sources":["../../src/services/analytics-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEZ,YAAY,EACZ,UAAU,EACV,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAoB3B,qBAAa,gBAAgB;IAC3B,UAAU,IAAI,IAAI;IAIlB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;IA4BhF,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;IAoE7D,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,SAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IA6DrF,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,SAAK,GAAG,gBAAgB,EAAE;CAqCvE"}