@fluxmail/core 0.19.0 → 0.20.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 (49) hide show
  1. package/dist/attachments.d.ts +9 -0
  2. package/dist/attachments.d.ts.map +1 -0
  3. package/dist/attachments.js +27 -0
  4. package/dist/attachments.js.map +1 -0
  5. package/dist/errors.d.ts +5 -0
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js +16 -0
  8. package/dist/errors.js.map +1 -1
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcp/clients.d.ts +16 -0
  14. package/dist/mcp/clients.d.ts.map +1 -0
  15. package/dist/mcp/clients.js +69 -0
  16. package/dist/mcp/clients.js.map +1 -0
  17. package/dist/mcp/index.d.ts +2 -0
  18. package/dist/mcp/index.d.ts.map +1 -1
  19. package/dist/mcp/index.js +2 -0
  20. package/dist/mcp/index.js.map +1 -1
  21. package/dist/mcp/pdf.d.ts +18 -0
  22. package/dist/mcp/pdf.d.ts.map +1 -0
  23. package/dist/mcp/pdf.js +97 -0
  24. package/dist/mcp/pdf.js.map +1 -0
  25. package/dist/mcp/results.d.ts +114 -0
  26. package/dist/mcp/results.d.ts.map +1 -0
  27. package/dist/mcp/results.js +165 -0
  28. package/dist/mcp/results.js.map +1 -0
  29. package/dist/mcp/tools.d.ts +7 -0
  30. package/dist/mcp/tools.d.ts.map +1 -1
  31. package/dist/mcp/tools.generated.d.ts +1 -0
  32. package/dist/mcp/tools.generated.d.ts.map +1 -1
  33. package/dist/mcp/tools.generated.js +1852 -0
  34. package/dist/mcp/tools.generated.js.map +1 -1
  35. package/dist/mcp/tools.js +2 -1
  36. package/dist/mcp/tools.js.map +1 -1
  37. package/dist/reply.d.ts +11 -1
  38. package/dist/reply.d.ts.map +1 -1
  39. package/dist/reply.js +43 -0
  40. package/dist/reply.js.map +1 -1
  41. package/dist/search.d.ts +8 -1
  42. package/dist/search.d.ts.map +1 -1
  43. package/dist/search.js +36 -0
  44. package/dist/search.js.map +1 -1
  45. package/dist/searchCursor.d.ts +35 -0
  46. package/dist/searchCursor.d.ts.map +1 -0
  47. package/dist/searchCursor.js +113 -0
  48. package/dist/searchCursor.js.map +1 -0
  49. package/package.json +9 -1
@@ -0,0 +1,165 @@
1
+ /** The most body characters one MCP result returns, so one long email can't fill the model's context. */
2
+ export const MAX_BODY_CHARS = 50_000;
3
+ export const MAX_THREAD_PAGE_TOKEN_CHARS = 1024;
4
+ export const DEFAULT_THREAD_PAGE_SIZE = 10;
5
+ /** Keep the requested body parts, cut to a shared character budget, and say where each was cut. */
6
+ export function selectBody(message, format, budget = MAX_BODY_CHARS) {
7
+ if (!message.body || format === 'none')
8
+ return { ...message, body: undefined };
9
+ const body = {};
10
+ const bodyTruncation = {};
11
+ let remaining = budget;
12
+ for (const key of ['text', 'html']) {
13
+ if (format !== 'both' && format !== key)
14
+ continue;
15
+ const value = message.body[key];
16
+ if (value === undefined)
17
+ continue;
18
+ const selected = value.slice(0, remaining);
19
+ body[key] = selected;
20
+ bodyTruncation[key] = {
21
+ totalChars: value.length,
22
+ ...(selected.length < value.length ? { nextOffset: selected.length } : {}),
23
+ };
24
+ remaining -= selected.length;
25
+ }
26
+ return { ...message, body, bodyTruncation };
27
+ }
28
+ /** One window of a message body, for reading a long body in parts. */
29
+ export function bodyPage(message, format, offset = 0, maxChars = MAX_BODY_CHARS) {
30
+ const value = message.body?.[format] ?? '';
31
+ const text = value.slice(offset, offset + maxChars);
32
+ return {
33
+ format,
34
+ text,
35
+ offset,
36
+ totalChars: value.length,
37
+ ...(offset + text.length < value.length ? { nextOffset: offset + text.length } : {}),
38
+ };
39
+ }
40
+ /**
41
+ * The message offset a thread page token points to, or undefined when the token is malformed or
42
+ * belongs to another thread. A token is the base64url JSON of the thread ID and the offset.
43
+ */
44
+ export function threadPageOffset(threadId, pageToken) {
45
+ if (!pageToken)
46
+ return 0;
47
+ try {
48
+ const parsed = JSON.parse(Buffer.from(pageToken, 'base64url').toString('utf8'));
49
+ if (parsed.threadId === threadId && Number.isInteger(parsed.offset) && parsed.offset >= 0)
50
+ return parsed.offset;
51
+ }
52
+ catch {
53
+ // Reported as undefined.
54
+ }
55
+ return undefined;
56
+ }
57
+ /** One page of a thread's messages. Bodies on the page share one character budget. */
58
+ export function threadPage(thread, options) {
59
+ const { threadId, offset } = options;
60
+ let budget = MAX_BODY_CHARS;
61
+ const messages = thread.messages
62
+ .slice(offset, offset + (options.pageSize ?? DEFAULT_THREAD_PAGE_SIZE))
63
+ .map((message) => {
64
+ const selected = selectBody(message, options.bodyFormat ?? 'both', budget);
65
+ budget -= (selected.body?.text?.length ?? 0) + (selected.body?.html?.length ?? 0);
66
+ return selected;
67
+ });
68
+ const nextOffset = offset + messages.length;
69
+ return {
70
+ id: thread.id,
71
+ subject: thread.subject,
72
+ messages,
73
+ ...(nextOffset < thread.messages.length
74
+ ? { nextPageToken: Buffer.from(JSON.stringify({ threadId, offset: nextOffset })).toString('base64url') }
75
+ : {}),
76
+ };
77
+ }
78
+ /** Folders a move can't target, because archive and trash have their own actions. */
79
+ export const PROTECTED_MOVE_DESTINATIONS = new Set(['archive', 'trash']);
80
+ /**
81
+ * The provider action for a modify action and its arguments, or an error message for the
82
+ * caller when a required argument is missing or the move targets a protected folder.
83
+ */
84
+ export function toModifyAction(action, args) {
85
+ if (action === 'move') {
86
+ if (!args.folder)
87
+ return { error: 'Moving messages requires "folder"' };
88
+ if (PROTECTED_MOVE_DESTINATIONS.has(args.folder.trim().toLowerCase()))
89
+ return { error: 'Archive or trash these messages instead of moving them to this folder.' };
90
+ return { action: { move: args.folder } };
91
+ }
92
+ if (action === 'addLabels' || action === 'removeLabels') {
93
+ if (!args.labels?.length)
94
+ return { error: `${action} requires "labels"` };
95
+ return { action: action === 'addLabels' ? { addLabels: args.labels } : { removeLabels: args.labels } };
96
+ }
97
+ return { action };
98
+ }
99
+ const TEXT_TYPES = /^(text\/[\w.+-]+|application\/(json|xml|csv|yaml|x-yaml|javascript|[\w.-]+\+(json|xml)))$/;
100
+ const IMAGE_TYPES = /^image\/(png|jpeg|gif|webp)$/;
101
+ export function mediaType(mimeType) {
102
+ return mimeType.split(';')[0].trim().toLowerCase();
103
+ }
104
+ function decodeText(content) {
105
+ try {
106
+ return new TextDecoder('utf-8', { fatal: true }).decode(content);
107
+ }
108
+ catch {
109
+ return undefined;
110
+ }
111
+ }
112
+ /**
113
+ * Some clients, including claude.ai, only pass a blob to the model through
114
+ * file storage, so UTF-8 text attachments go out as text.
115
+ */
116
+ export function attachmentContents(uri, mimeType, content) {
117
+ const text = TEXT_TYPES.test(mediaType(mimeType)) ? decodeText(content) : undefined;
118
+ return text === undefined ? { uri, mimeType, blob: content.toString('base64') } : { uri, mimeType, text };
119
+ }
120
+ export function inlineContent(uri, mimeType, content) {
121
+ if (IMAGE_TYPES.test(mediaType(mimeType)))
122
+ return { type: 'image', data: content.toString('base64'), mimeType };
123
+ return { type: 'resource', resource: attachmentContents(uri, mimeType, content) };
124
+ }
125
+ /** The URI of an attachment resource. The filename is display-only; lookups use the IDs. */
126
+ export function attachmentUri(accountId, messageId, attachmentId, filename) {
127
+ // encodeURIComponent throws on an unpaired surrogate, so replace it.
128
+ const wellFormed = filename.replace(/[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/g, '\ufffd');
129
+ return ['fluxmail://attachment', ...[accountId, messageId, attachmentId, wellFormed].map(encodeURIComponent)].join('/');
130
+ }
131
+ export const ATTACHMENT_URI_TEMPLATE = 'fluxmail://attachment/{accountId}/{messageId}/{attachmentId}/{filename}';
132
+ /** Limits on PDF text extraction. At most `workers` extractions run at once in a process, across extractors. */
133
+ export const PDF_TEXT_LIMITS = { maxPages: 200, maxChars: 80_000, heapMb: 128, timeoutMs: 15_000, workers: 2 };
134
+ /** A PDF page or ascending page range such as 201-400. Check the order with parsePageRange. */
135
+ export const PDF_PAGE_RANGE_PATTERN = /^[1-9]\d{0,5}(-[1-9]\d{0,5})?$/;
136
+ export const PDF_PAGE_RANGE_MESSAGE = 'Use a page or an ascending range such as 201-400.';
137
+ /** The first and last page of a range, or undefined when it is malformed or descending. */
138
+ export function parsePageRange(pages) {
139
+ if (!PDF_PAGE_RANGE_PATTERN.test(pages))
140
+ return undefined;
141
+ const [first, last = first] = pages.split('-').map(Number);
142
+ return last >= first ? { first, last } : undefined;
143
+ }
144
+ /** The text block describing an extraction, or none when extraction failed. */
145
+ export function pdfTextContent(filename, pdf) {
146
+ if (!pdf)
147
+ return [];
148
+ const { firstPage, lastPage, totalPages } = pdf;
149
+ if (lastPage < firstPage) {
150
+ return [{ type: 'text', text: `${filename} has ${totalPages} ${totalPages === 1 ? 'page' : 'pages'}.` }];
151
+ }
152
+ const whole = firstPage === 1 && lastPage === totalPages && !pdf.cut;
153
+ const pages = firstPage === lastPage ? `page ${firstPage}` : `pages ${firstPage}-${lastPage}`;
154
+ const cut = pdf.cut ? `, cut at ${PDF_TEXT_LIMITS.maxChars.toLocaleString('en-US')} characters` : '';
155
+ const scope = whole ? '' : ` (${pages} of ${totalPages}${cut})`;
156
+ return [
157
+ {
158
+ type: 'text',
159
+ text: pdf.text
160
+ ? `Text extracted from ${filename}${scope}:\n\n${pdf.text}`
161
+ : `No text found in ${filename}${scope}.`,
162
+ },
163
+ ];
164
+ }
165
+ //# sourceMappingURL=results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/mcp/results.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,13 @@ export interface SharedTool {
20
20
  annotations: SharedToolAnnotations;
21
21
  /** JSON Schema exactly as advertised by tools/list. Optional mail arguments accept null. */
22
22
  inputSchema: Record<string, unknown>;
23
+ /**
24
+ * JSON Schema for a successful result's structuredContent, as advertised by tools/list. Messages,
25
+ * accounts, folders, labels, send-as identities, attachments, search pages, delivery operations
26
+ * and modify results allow additional properties; other objects, including the `data` wrapper,
27
+ * are closed.
28
+ */
29
+ outputSchema: Record<string, unknown>;
23
30
  }
24
31
  /** The MCP tools every Fluxmail product offers with the same names, arguments, annotations and scopes. */
25
32
  export declare const SHARED_TOOLS: readonly SharedTool[];
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnE,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,iBAAiB,0hBAgCpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,wHAAwH;IACxH,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,EAAE,qBAAqB,CAAC;IACnC,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAsOD,0GAA0G;AAC1G,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAK3C,CAAC;AAIJ,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAE3D"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnE,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,iBAAiB,0hBAgCpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,wHAAwH;IACxH,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,EAAE,qBAAqB,CAAC;IACnC,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAsOD,0GAA0G;AAC1G,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAM3C,CAAC;AAIJ,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAE3D"}
@@ -1,2 +1,3 @@
1
1
  export declare const SHARED_TOOL_INPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>>;
2
+ export declare const SHARED_TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>>;
2
3
  //# sourceMappingURL=tools.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.generated.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAu9DvF,CAAC"}
1
+ {"version":3,"file":"tools.generated.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAu9DvF,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4zDxF,CAAC"}