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,393 @@
1
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
2
+ const EMAIL_ID_SEPARATOR = "::";
3
+ export function parseEmails(value) {
4
+ if (!value) {
5
+ return [];
6
+ }
7
+ return value
8
+ .split(/[;,]/)
9
+ .map((item) => item.trim())
10
+ .filter(Boolean);
11
+ }
12
+ export function isValidEmail(email) {
13
+ return EMAIL_REGEX.test(email);
14
+ }
15
+ export function ensureValidEmails(emails, fieldName) {
16
+ const invalid = emails.filter((email) => !isValidEmail(email));
17
+ if (invalid.length > 0) {
18
+ throw new Error(`Invalid ${fieldName} email address(es): ${invalid.join(", ")}`);
19
+ }
20
+ }
21
+ export function createEmailId(folder, uid) {
22
+ return `${encodeURIComponent(folder)}${EMAIL_ID_SEPARATOR}${uid}`;
23
+ }
24
+ export function parseEmailId(emailId) {
25
+ const index = emailId.lastIndexOf(EMAIL_ID_SEPARATOR);
26
+ if (index === -1) {
27
+ throw new Error("Invalid emailId. Expected the email identifier returned by get_emails or search_emails.");
28
+ }
29
+ const folder = decodeURIComponent(emailId.slice(0, index));
30
+ const uid = Number(emailId.slice(index + EMAIL_ID_SEPARATOR.length));
31
+ if (!folder || !Number.isInteger(uid) || uid <= 0) {
32
+ throw new Error("Invalid emailId. Expected the email identifier returned by get_emails or search_emails.");
33
+ }
34
+ return { folder, uid };
35
+ }
36
+ export function mapEnvelopeAddresses(addresses) {
37
+ return (addresses ?? []).map((address) => ({
38
+ name: address.name,
39
+ address: address.address,
40
+ }));
41
+ }
42
+ export function mapParsedAddresses(addresses) {
43
+ return (addresses?.value ?? []).map((address) => ({
44
+ name: address.name,
45
+ address: address.address,
46
+ }));
47
+ }
48
+ export function previewText(value, maxLength = 220) {
49
+ if (!value) {
50
+ return undefined;
51
+ }
52
+ const normalized = value.replace(/\s+/g, " ").trim();
53
+ if (!normalized) {
54
+ return undefined;
55
+ }
56
+ if (normalized.length <= maxLength) {
57
+ return normalized;
58
+ }
59
+ return `${normalized.slice(0, maxLength - 1)}...`;
60
+ }
61
+ export function stripHtmlToText(value) {
62
+ if (!value) {
63
+ return undefined;
64
+ }
65
+ const withoutTags = value
66
+ .replace(/<style[\s\S]*?<\/style>/gi, " ")
67
+ .replace(/<script[\s\S]*?<\/script>/gi, " ")
68
+ .replace(/<[^>]+>/g, " ")
69
+ .replace(/&nbsp;/gi, " ")
70
+ .replace(/&amp;/gi, "&")
71
+ .replace(/&lt;/gi, "<")
72
+ .replace(/&gt;/gi, ">");
73
+ return previewText(withoutTags, 10_000);
74
+ }
75
+ export function extractMessageIdList(value) {
76
+ if (!value) {
77
+ return [];
78
+ }
79
+ const raw = Array.isArray(value) ? value.join(" ") : value;
80
+ const matches = raw.match(/<[^>]+>/g) ?? [];
81
+ const normalized = matches
82
+ .map((entry) => normalizeMessageId(entry))
83
+ .filter((entry) => Boolean(entry));
84
+ return [...new Set(normalized)];
85
+ }
86
+ export function extractAttachments(structure) {
87
+ if (!structure) {
88
+ return [];
89
+ }
90
+ const attachments = [];
91
+ const visit = (node) => {
92
+ const filename = node.dispositionParameters?.filename ??
93
+ node.parameters?.name ??
94
+ node.parameters?.filename;
95
+ const disposition = node.disposition?.toLowerCase();
96
+ const looksLikeAttachment = disposition === "attachment" || (disposition === "inline" && Boolean(filename));
97
+ if (looksLikeAttachment || filename) {
98
+ const classification = classifyAttachment({
99
+ filename,
100
+ contentType: node.type,
101
+ disposition: node.disposition,
102
+ cid: node.id,
103
+ });
104
+ attachments.push({
105
+ id: node.part,
106
+ filename,
107
+ contentType: node.type,
108
+ size: node.size,
109
+ disposition: node.disposition,
110
+ part: node.part,
111
+ cid: node.id,
112
+ isInline: disposition === "inline",
113
+ kind: classification.kind,
114
+ isCalendarInvite: classification.isCalendarInvite,
115
+ isSignature: classification.isSignature,
116
+ });
117
+ }
118
+ for (const child of node.childNodes ?? []) {
119
+ visit(child);
120
+ }
121
+ };
122
+ visit(structure);
123
+ return attachments;
124
+ }
125
+ export function dedupeEmails(emails) {
126
+ const seen = new Set();
127
+ const result = [];
128
+ for (const email of emails) {
129
+ const dedupeKey = email.messageId || email.id;
130
+ if (seen.has(dedupeKey)) {
131
+ continue;
132
+ }
133
+ seen.add(dedupeKey);
134
+ result.push(email);
135
+ }
136
+ return result;
137
+ }
138
+ export function sortEmailsByNewest(emails) {
139
+ return [...emails].sort((left, right) => {
140
+ const leftTime = new Date(left.internalDate || left.date || 0).getTime();
141
+ const rightTime = new Date(right.internalDate || right.date || 0).getTime();
142
+ if (rightTime !== leftTime) {
143
+ return rightTime - leftTime;
144
+ }
145
+ return right.uid - left.uid;
146
+ });
147
+ }
148
+ export function normalizeLimit(value, defaultValue, min = 1, max = 250) {
149
+ if (typeof value !== "number" || Number.isNaN(value)) {
150
+ return defaultValue;
151
+ }
152
+ const rounded = Math.trunc(value);
153
+ if (rounded < min) {
154
+ return min;
155
+ }
156
+ if (rounded > max) {
157
+ return max;
158
+ }
159
+ return rounded;
160
+ }
161
+ export function normalizeBoolean(value, defaultValue) {
162
+ return typeof value === "boolean" ? value : defaultValue;
163
+ }
164
+ export function parseDateInput(value) {
165
+ if (!value) {
166
+ return undefined;
167
+ }
168
+ const date = new Date(value);
169
+ if (Number.isNaN(date.getTime())) {
170
+ throw new Error(`Invalid date value: ${value}`);
171
+ }
172
+ return date;
173
+ }
174
+ export function nextDay(date) {
175
+ return new Date(date.getTime() + 24 * 60 * 60 * 1000);
176
+ }
177
+ export function matchesLocalSearchFilters(email, filters) {
178
+ if (typeof filters.hasAttachment === "boolean" && email.hasAttachments !== filters.hasAttachment) {
179
+ return false;
180
+ }
181
+ if (filters.threadId && email.threadId !== filters.threadId) {
182
+ return false;
183
+ }
184
+ if (filters.label) {
185
+ const labelNeedle = filters.label.toLowerCase();
186
+ const folderMatch = email.folder.toLowerCase() === labelNeedle;
187
+ const labelMatch = email.labels.some((label) => label.toLowerCase() === labelNeedle);
188
+ if (!folderMatch && !labelMatch) {
189
+ return false;
190
+ }
191
+ }
192
+ if (filters.attachmentName) {
193
+ const attachmentNeedle = filters.attachmentName.toLowerCase();
194
+ const match = email.attachments.some((attachment) => (attachment.filename || "").toLowerCase().includes(attachmentNeedle));
195
+ if (!match) {
196
+ return false;
197
+ }
198
+ }
199
+ if (filters.senderDomain) {
200
+ const senderDomain = filters.senderDomain.toLowerCase();
201
+ const match = email.from.some((entry) => extractDomain(entry.address || "") === senderDomain);
202
+ if (!match) {
203
+ return false;
204
+ }
205
+ }
206
+ if (filters.mailboxRole) {
207
+ const roleNeedle = filters.mailboxRole.toLowerCase();
208
+ const roles = new Set([email.folder, ...email.labels]
209
+ .map((value) => normalizeMailboxLabel(value))
210
+ .filter((value) => Boolean(value))
211
+ .map((value) => value.toLowerCase()));
212
+ if (!roles.has(roleNeedle)) {
213
+ return false;
214
+ }
215
+ }
216
+ return true;
217
+ }
218
+ export function stringifyForJson(value) {
219
+ return JSON.stringify(normalizeJsonValue(value), null, 2);
220
+ }
221
+ export function normalizeJsonValue(value) {
222
+ if (value === undefined) {
223
+ return undefined;
224
+ }
225
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
226
+ return value;
227
+ }
228
+ if (typeof value === "bigint") {
229
+ return value.toString();
230
+ }
231
+ if (value instanceof Date) {
232
+ return value.toISOString();
233
+ }
234
+ if (Buffer.isBuffer(value)) {
235
+ return value.toString("base64");
236
+ }
237
+ if (Array.isArray(value)) {
238
+ return value.map((item) => normalizeJsonValue(item));
239
+ }
240
+ if (value instanceof Set) {
241
+ return [...value].map((item) => normalizeJsonValue(item));
242
+ }
243
+ if (value instanceof Map) {
244
+ return Object.fromEntries([...value.entries()].map(([key, mapValue]) => [String(key), normalizeJsonValue(mapValue)]));
245
+ }
246
+ if (value instanceof Error) {
247
+ return {
248
+ name: value.name,
249
+ message: value.message,
250
+ stack: value.stack,
251
+ };
252
+ }
253
+ if (typeof value === "object") {
254
+ return Object.fromEntries(Object.entries(value).flatMap(([key, objectValue]) => {
255
+ const normalized = normalizeJsonValue(objectValue);
256
+ return normalized === undefined ? [] : [[key, normalized]];
257
+ }));
258
+ }
259
+ return String(value);
260
+ }
261
+ export function lowerCaseAddress(value) {
262
+ return value?.trim().toLowerCase();
263
+ }
264
+ export function normalizeMessageId(value) {
265
+ const trimmed = value?.trim();
266
+ if (!trimmed) {
267
+ return undefined;
268
+ }
269
+ return trimmed.replace(/\s+/g, "").toLowerCase();
270
+ }
271
+ export function extractDomain(address) {
272
+ const parts = address.split("@");
273
+ return parts.length === 2 ? parts[1].toLowerCase() : undefined;
274
+ }
275
+ export function normalizeSubjectForThread(subject) {
276
+ const collapsed = subject.replace(/\s+/g, " ").trim();
277
+ if (!collapsed) {
278
+ return "(no subject)";
279
+ }
280
+ return collapsed.replace(/^(?:(?:re|fw|fwd)\s*:\s*)+/i, "").trim() || "(no subject)";
281
+ }
282
+ export function sanitizeFileName(filename, fallback = "attachment") {
283
+ const normalized = (filename || fallback).replace(/[\\/:*?"<>|]+/g, "_").trim();
284
+ return normalized || fallback;
285
+ }
286
+ export function isTextLikeMimeType(mimeType) {
287
+ if (!mimeType) {
288
+ return false;
289
+ }
290
+ const normalized = mimeType.toLowerCase();
291
+ return (normalized.startsWith("text/") ||
292
+ normalized.includes("json") ||
293
+ normalized.includes("xml") ||
294
+ normalized.includes("javascript") ||
295
+ normalized.includes("csv"));
296
+ }
297
+ export function classifyAttachment(input) {
298
+ const filename = input.filename?.toLowerCase() || "";
299
+ const contentType = input.contentType?.toLowerCase() || "";
300
+ const disposition = input.disposition?.toLowerCase() || "";
301
+ const cid = input.cid?.toLowerCase() || "";
302
+ const isCalendarInvite = contentType === "text/calendar" || filename.endsWith(".ics") || filename.endsWith(".ifb");
303
+ const isSignature = filename === "smime.p7s" ||
304
+ filename === "signature.asc" ||
305
+ contentType.includes("pkcs7-signature") ||
306
+ contentType.includes("pgp-signature");
307
+ if (isCalendarInvite) {
308
+ return { kind: "calendar", isCalendarInvite: true, isSignature: false };
309
+ }
310
+ if (isSignature) {
311
+ return { kind: "signature", isCalendarInvite: false, isSignature: true };
312
+ }
313
+ if (contentType.startsWith("image/") || /\.(png|jpe?g|gif|webp|svg)$/i.test(filename) || Boolean(cid)) {
314
+ return { kind: "image", isCalendarInvite: false, isSignature: false };
315
+ }
316
+ if (contentType === "message/rfc822" || filename.endsWith(".eml") || filename.endsWith(".msg")) {
317
+ return { kind: "message", isCalendarInvite: false, isSignature: false };
318
+ }
319
+ if (/\.(zip|gz|tgz|bz2|rar|7z)$/i.test(filename) ||
320
+ contentType.includes("zip") ||
321
+ contentType.includes("compressed") ||
322
+ contentType.includes("archive")) {
323
+ return { kind: "archive", isCalendarInvite: false, isSignature: false };
324
+ }
325
+ if (isTextLikeMimeType(contentType) || /\.(txt|md|csv|json|xml|html?)$/i.test(filename)) {
326
+ return { kind: "text", isCalendarInvite: false, isSignature: false };
327
+ }
328
+ if (/\.(pdf|docx?|xlsx?|pptx?)$/i.test(filename) ||
329
+ contentType.includes("pdf") ||
330
+ contentType.includes("officedocument") ||
331
+ contentType.includes("msword") ||
332
+ contentType.includes("spreadsheet") ||
333
+ contentType.includes("presentation")) {
334
+ return { kind: "document", isCalendarInvite: false, isSignature: false };
335
+ }
336
+ if (disposition === "inline" && !filename) {
337
+ return { kind: "image", isCalendarInvite: false, isSignature: false };
338
+ }
339
+ return { kind: "other", isCalendarInvite: false, isSignature: false };
340
+ }
341
+ export function summarizeCalendarText(value) {
342
+ const normalized = value.replace(/\r/g, "");
343
+ const fields = new Map();
344
+ for (const line of normalized.split("\n")) {
345
+ const separator = line.indexOf(":");
346
+ if (separator <= 0) {
347
+ continue;
348
+ }
349
+ const key = line.slice(0, separator).split(";")[0].trim().toUpperCase();
350
+ const fieldValue = line.slice(separator + 1).trim();
351
+ if (fieldValue && !fields.has(key)) {
352
+ fields.set(key, fieldValue);
353
+ }
354
+ }
355
+ const summary = [
356
+ fields.get("SUMMARY"),
357
+ fields.get("ORGANIZER"),
358
+ fields.get("DTSTART") ? `Starts ${fields.get("DTSTART")}` : undefined,
359
+ fields.get("DTEND") ? `Ends ${fields.get("DTEND")}` : undefined,
360
+ fields.get("LOCATION") ? `Location ${fields.get("LOCATION")}` : undefined,
361
+ ]
362
+ .filter(Boolean)
363
+ .join(" | ");
364
+ return previewText(summary || normalized, 8_000);
365
+ }
366
+ export function normalizeMailboxLabel(value) {
367
+ const trimmed = value?.trim();
368
+ if (!trimmed) {
369
+ return undefined;
370
+ }
371
+ const decoded = decodeURIComponent(trimmed);
372
+ const lower = decoded.toLowerCase();
373
+ if (lower === "inbox")
374
+ return "Inbox";
375
+ if (lower === "archive")
376
+ return "Archive";
377
+ if (lower === "all mail")
378
+ return "All Mail";
379
+ if (lower === "sent" || lower === "sent mail")
380
+ return "Sent";
381
+ if (lower === "drafts")
382
+ return "Drafts";
383
+ if (lower === "spam" || lower === "junk")
384
+ return "Spam";
385
+ if (lower === "trash" || lower === "deleted messages")
386
+ return "Trash";
387
+ if (lower === "starred")
388
+ return "Starred";
389
+ if (decoded.startsWith("Labels/"))
390
+ return decoded.slice("Labels/".length) || "Labels";
391
+ return decoded;
392
+ }
393
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { LogEntry } from "../types/index.js";
2
+ type LogLevel = LogEntry["level"];
3
+ export declare class Logger {
4
+ private readonly entries;
5
+ private debugMode;
6
+ private readonly maxEntries;
7
+ constructor(maxEntries?: number);
8
+ setDebugMode(enabled: boolean): void;
9
+ debug(message: string, context?: string, data?: unknown): void;
10
+ info(message: string, context?: string, data?: unknown): void;
11
+ warn(message: string, context?: string, data?: unknown): void;
12
+ error(message: string, context?: string, data?: unknown): void;
13
+ getLogs(options?: {
14
+ level?: LogLevel;
15
+ limit?: number;
16
+ }): LogEntry[];
17
+ clear(): void;
18
+ private log;
19
+ }
20
+ export declare const logger: Logger;
21
+ export {};
22
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,KAAK,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AA6ClC,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,UAAU,SAAM;IAI5B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9D,OAAO,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,QAAQ,EAAE;IASnE,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,GAAG;CA8BZ;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,91 @@
1
+ const LEVEL_ORDER = {
2
+ debug: 10,
3
+ info: 20,
4
+ warn: 30,
5
+ error: 40,
6
+ };
7
+ function normalizeData(data) {
8
+ if (data instanceof Error) {
9
+ return {
10
+ name: data.name,
11
+ message: data.message,
12
+ stack: data.stack,
13
+ };
14
+ }
15
+ if (Array.isArray(data)) {
16
+ return data.map((value) => normalizeData(value));
17
+ }
18
+ if (data instanceof Set) {
19
+ return [...data].map((value) => normalizeData(value));
20
+ }
21
+ if (data instanceof Map) {
22
+ return Object.fromEntries([...data.entries()].map(([key, value]) => [String(key), normalizeData(value)]));
23
+ }
24
+ if (typeof data === "bigint") {
25
+ return data.toString();
26
+ }
27
+ if (data && typeof data === "object") {
28
+ return Object.fromEntries(Object.entries(data).map(([key, value]) => [key, normalizeData(value)]));
29
+ }
30
+ return data;
31
+ }
32
+ export class Logger {
33
+ entries = [];
34
+ debugMode = false;
35
+ maxEntries;
36
+ constructor(maxEntries = 500) {
37
+ this.maxEntries = maxEntries;
38
+ }
39
+ setDebugMode(enabled) {
40
+ this.debugMode = enabled;
41
+ }
42
+ debug(message, context, data) {
43
+ this.log("debug", message, context, data);
44
+ }
45
+ info(message, context, data) {
46
+ this.log("info", message, context, data);
47
+ }
48
+ warn(message, context, data) {
49
+ this.log("warn", message, context, data);
50
+ }
51
+ error(message, context, data) {
52
+ this.log("error", message, context, data);
53
+ }
54
+ getLogs(options) {
55
+ const levelThreshold = options?.level ? LEVEL_ORDER[options.level] : 0;
56
+ const limit = options?.limit ?? 100;
57
+ return this.entries
58
+ .filter((entry) => LEVEL_ORDER[entry.level] >= levelThreshold)
59
+ .slice(-limit);
60
+ }
61
+ clear() {
62
+ this.entries.length = 0;
63
+ }
64
+ log(level, message, context, data) {
65
+ const entry = {
66
+ timestamp: new Date().toISOString(),
67
+ level,
68
+ context,
69
+ message,
70
+ data: normalizeData(data),
71
+ };
72
+ this.entries.push(entry);
73
+ if (this.entries.length > this.maxEntries) {
74
+ this.entries.shift();
75
+ }
76
+ if (level === "debug" && !this.debugMode) {
77
+ return;
78
+ }
79
+ const parts = [entry.timestamp, level.toUpperCase()];
80
+ if (context) {
81
+ parts.push(`[${context}]`);
82
+ }
83
+ parts.push(message);
84
+ if (entry.data !== undefined) {
85
+ parts.push(JSON.stringify(entry.data));
86
+ }
87
+ process.stderr.write(`${parts.join(" ")}\n`);
88
+ }
89
+ }
90
+ export const logger = new Logger();
91
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { EmailAction, ProtonRuntimeConfig } from "../types/index.js";
2
+ export declare function sanitizeRuntimeConfig(runtime: ProtonRuntimeConfig): Record<string, unknown>;
3
+ export declare function ensureSendAllowed(runtime: ProtonRuntimeConfig): void;
4
+ export declare function ensureEmailActionAllowed(runtime: ProtonRuntimeConfig, action: EmailAction): void;
5
+ export declare function resolveRemoteDraftSync(runtime: ProtonRuntimeConfig, requested: boolean): {
6
+ enabled: boolean;
7
+ reason?: string;
8
+ };
9
+ export declare function ensureRemoteDraftSyncAllowed(runtime: ProtonRuntimeConfig): void;
10
+ export declare function ensureMailboxWriteAllowed(runtime: ProtonRuntimeConfig): void;
11
+ export declare function ensureDestructiveConfirmed(runtime: ProtonRuntimeConfig, confirmed: boolean | undefined, description: string): void;
12
+ //# sourceMappingURL=runtime-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-policy.d.ts","sourceRoot":"","sources":["../../src/utils/runtime-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa3F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAIpE;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,GAClB,IAAI,CAMN;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,OAAO,GACjB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAoBA;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAK/E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAI5E;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,WAAW,EAAE,MAAM,GAClB,IAAI,CAMN"}
@@ -0,0 +1,62 @@
1
+ export function sanitizeRuntimeConfig(runtime) {
2
+ return {
3
+ readOnly: runtime.readOnly,
4
+ allowSend: runtime.allowSend,
5
+ allowRemoteDraftSync: runtime.allowRemoteDraftSync,
6
+ allowedActions: [...runtime.allowedActions],
7
+ startupSync: runtime.startupSync,
8
+ autoSyncFolder: runtime.autoSyncFolder,
9
+ autoSyncFull: runtime.autoSyncFull,
10
+ autoSyncLimitPerFolder: runtime.autoSyncLimitPerFolder,
11
+ idleWatchEnabled: runtime.idleWatchEnabled,
12
+ idleMaxSeconds: runtime.idleMaxSeconds,
13
+ };
14
+ }
15
+ export function ensureSendAllowed(runtime) {
16
+ if (!runtime.allowSend || runtime.readOnly) {
17
+ throw new Error("Send operations are disabled by the current runtime policy.");
18
+ }
19
+ }
20
+ export function ensureEmailActionAllowed(runtime, action) {
21
+ ensureMailboxWriteAllowed(runtime);
22
+ if (!runtime.allowedActions.includes(action)) {
23
+ throw new Error(`Mailbox action ${action} is disabled by the current runtime policy.`);
24
+ }
25
+ }
26
+ export function resolveRemoteDraftSync(runtime, requested) {
27
+ if (!requested) {
28
+ return { enabled: false };
29
+ }
30
+ if (runtime.readOnly) {
31
+ return {
32
+ enabled: false,
33
+ reason: "Remote draft sync is disabled because the server is running in read-only mode.",
34
+ };
35
+ }
36
+ if (!runtime.allowRemoteDraftSync) {
37
+ return {
38
+ enabled: false,
39
+ reason: "Remote draft sync is disabled by the current runtime policy.",
40
+ };
41
+ }
42
+ return { enabled: true };
43
+ }
44
+ export function ensureRemoteDraftSyncAllowed(runtime) {
45
+ const decision = resolveRemoteDraftSync(runtime, true);
46
+ if (!decision.enabled) {
47
+ throw new Error(decision.reason || "Remote draft sync is disabled by the current runtime policy.");
48
+ }
49
+ }
50
+ export function ensureMailboxWriteAllowed(runtime) {
51
+ if (runtime.readOnly) {
52
+ throw new Error("Mailbox write operations are disabled because the server is running in read-only mode.");
53
+ }
54
+ }
55
+ export function ensureDestructiveConfirmed(runtime, confirmed, description) {
56
+ if (!runtime.confirmDestructive)
57
+ return;
58
+ if (confirmed === true)
59
+ return;
60
+ throw new Error(`Confirmation required: ${description}\n\nThis action is irreversible. Call this tool again with confirmed: true after asking the user to confirm.`);
61
+ }
62
+ //# sourceMappingURL=runtime-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-policy.js","sourceRoot":"","sources":["../../src/utils/runtime-policy.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,OAA4B;IAChE,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;QAC3C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAA4B,EAC5B,MAAmB;IAEnB,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,6CAA6C,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAA4B,EAC5B,SAAkB;IAKlB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,gFAAgF;SACzF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,8DAA8D;SACvE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAA4B;IACvE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,8DAA8D,CAAC,CAAC;IACrG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAA4B;IACpE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAA4B,EAC5B,SAA8B,EAC9B,WAAmB;IAEnB,IAAI,CAAC,OAAO,CAAC,kBAAkB;QAAE,OAAO;IACxC,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO;IAC/B,MAAM,IAAI,KAAK,CACb,0BAA0B,WAAW,8GAA8G,CACpJ,CAAC;AACJ,CAAC"}
package/glama.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://glama.ai/mcp/schemas/server.json",
3
+ "maintainers": [
4
+ "googlarz"
5
+ ]
6
+ }