mcp-twake-mail 0.1.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 (114) hide show
  1. package/LICENSE +663 -0
  2. package/README.md +332 -0
  3. package/build/auth/index.d.ts +3 -0
  4. package/build/auth/index.js +4 -0
  5. package/build/auth/index.js.map +1 -0
  6. package/build/auth/oidc-flow.d.ts +47 -0
  7. package/build/auth/oidc-flow.js +146 -0
  8. package/build/auth/oidc-flow.js.map +1 -0
  9. package/build/auth/token-refresh.d.ts +56 -0
  10. package/build/auth/token-refresh.js +132 -0
  11. package/build/auth/token-refresh.js.map +1 -0
  12. package/build/auth/token-store.d.ts +33 -0
  13. package/build/auth/token-store.js +63 -0
  14. package/build/auth/token-store.js.map +1 -0
  15. package/build/cli/commands/auth.d.ts +5 -0
  16. package/build/cli/commands/auth.js +49 -0
  17. package/build/cli/commands/auth.js.map +1 -0
  18. package/build/cli/commands/check.d.ts +4 -0
  19. package/build/cli/commands/check.js +125 -0
  20. package/build/cli/commands/check.js.map +1 -0
  21. package/build/cli/commands/setup.d.ts +4 -0
  22. package/build/cli/commands/setup.js +172 -0
  23. package/build/cli/commands/setup.js.map +1 -0
  24. package/build/cli/index.d.ts +15 -0
  25. package/build/cli/index.js +56 -0
  26. package/build/cli/index.js.map +1 -0
  27. package/build/cli/prompts/setup-wizard.d.ts +38 -0
  28. package/build/cli/prompts/setup-wizard.js +121 -0
  29. package/build/cli/prompts/setup-wizard.js.map +1 -0
  30. package/build/config/__tests__/logger.test.d.ts +1 -0
  31. package/build/config/__tests__/logger.test.js +28 -0
  32. package/build/config/__tests__/logger.test.js.map +1 -0
  33. package/build/config/__tests__/schema.test.d.ts +1 -0
  34. package/build/config/__tests__/schema.test.js +101 -0
  35. package/build/config/__tests__/schema.test.js.map +1 -0
  36. package/build/config/logger.d.ts +3 -0
  37. package/build/config/logger.js +9 -0
  38. package/build/config/logger.js.map +1 -0
  39. package/build/config/schema.d.ts +28 -0
  40. package/build/config/schema.js +81 -0
  41. package/build/config/schema.js.map +1 -0
  42. package/build/errors.d.ts +34 -0
  43. package/build/errors.js +154 -0
  44. package/build/errors.js.map +1 -0
  45. package/build/errors.test.d.ts +1 -0
  46. package/build/errors.test.js +234 -0
  47. package/build/errors.test.js.map +1 -0
  48. package/build/index.d.ts +2 -0
  49. package/build/index.js +12 -0
  50. package/build/index.js.map +1 -0
  51. package/build/jmap/client.d.ts +96 -0
  52. package/build/jmap/client.js +267 -0
  53. package/build/jmap/client.js.map +1 -0
  54. package/build/mcp/server.d.ts +24 -0
  55. package/build/mcp/server.js +68 -0
  56. package/build/mcp/server.js.map +1 -0
  57. package/build/mcp/tools/attachment.d.ts +30 -0
  58. package/build/mcp/tools/attachment.js +246 -0
  59. package/build/mcp/tools/attachment.js.map +1 -0
  60. package/build/mcp/tools/attachment.test.d.ts +1 -0
  61. package/build/mcp/tools/attachment.test.js +457 -0
  62. package/build/mcp/tools/attachment.test.js.map +1 -0
  63. package/build/mcp/tools/email-operations.d.ts +10 -0
  64. package/build/mcp/tools/email-operations.js +828 -0
  65. package/build/mcp/tools/email-operations.js.map +1 -0
  66. package/build/mcp/tools/email-operations.test.d.ts +1 -0
  67. package/build/mcp/tools/email-operations.test.js +453 -0
  68. package/build/mcp/tools/email-operations.test.js.map +1 -0
  69. package/build/mcp/tools/email-sending.d.ts +10 -0
  70. package/build/mcp/tools/email-sending.js +682 -0
  71. package/build/mcp/tools/email-sending.js.map +1 -0
  72. package/build/mcp/tools/email.d.ts +10 -0
  73. package/build/mcp/tools/email.js +365 -0
  74. package/build/mcp/tools/email.js.map +1 -0
  75. package/build/mcp/tools/email.test.d.ts +1 -0
  76. package/build/mcp/tools/email.test.js +332 -0
  77. package/build/mcp/tools/email.test.js.map +1 -0
  78. package/build/mcp/tools/index.d.ts +14 -0
  79. package/build/mcp/tools/index.js +29 -0
  80. package/build/mcp/tools/index.js.map +1 -0
  81. package/build/mcp/tools/mailbox.d.ts +10 -0
  82. package/build/mcp/tools/mailbox.js +195 -0
  83. package/build/mcp/tools/mailbox.js.map +1 -0
  84. package/build/mcp/tools/mailbox.test.d.ts +1 -0
  85. package/build/mcp/tools/mailbox.test.js +231 -0
  86. package/build/mcp/tools/mailbox.test.js.map +1 -0
  87. package/build/mcp/tools/thread.d.ts +10 -0
  88. package/build/mcp/tools/thread.js +282 -0
  89. package/build/mcp/tools/thread.js.map +1 -0
  90. package/build/mcp/tools/thread.test.d.ts +1 -0
  91. package/build/mcp/tools/thread.test.js +384 -0
  92. package/build/mcp/tools/thread.test.js.map +1 -0
  93. package/build/transformers/__tests__/email.test.d.ts +1 -0
  94. package/build/transformers/__tests__/email.test.js +438 -0
  95. package/build/transformers/__tests__/email.test.js.map +1 -0
  96. package/build/transformers/__tests__/mailbox.test.d.ts +1 -0
  97. package/build/transformers/__tests__/mailbox.test.js +222 -0
  98. package/build/transformers/__tests__/mailbox.test.js.map +1 -0
  99. package/build/transformers/email.d.ts +76 -0
  100. package/build/transformers/email.js +138 -0
  101. package/build/transformers/email.js.map +1 -0
  102. package/build/transformers/index.d.ts +5 -0
  103. package/build/transformers/index.js +6 -0
  104. package/build/transformers/index.js.map +1 -0
  105. package/build/transformers/mailbox.d.ts +43 -0
  106. package/build/transformers/mailbox.js +70 -0
  107. package/build/transformers/mailbox.js.map +1 -0
  108. package/build/types/dto.d.ts +91 -0
  109. package/build/types/dto.js +9 -0
  110. package/build/types/dto.js.map +1 -0
  111. package/build/types/jmap.d.ts +110 -0
  112. package/build/types/jmap.js +5 -0
  113. package/build/types/jmap.js.map +1 -0
  114. package/package.json +71 -0
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Tests for thread MCP tools - get_thread, get_thread_emails.
3
+ */
4
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
5
+ import { registerThreadTools } from './thread.js';
6
+ describe('registerThreadTools', () => {
7
+ let mockServer;
8
+ let mockJmapClient;
9
+ let mockLogger;
10
+ let registeredTools;
11
+ beforeEach(() => {
12
+ registeredTools = new Map();
13
+ // Mock MCP server
14
+ mockServer = {
15
+ registerTool: vi.fn((name, _options, handler) => {
16
+ registeredTools.set(name, handler);
17
+ }),
18
+ };
19
+ // Mock JMAP client
20
+ mockJmapClient = {
21
+ getSession: vi.fn(() => ({ accountId: 'account-1', apiUrl: 'https://jmap.example.com/api' })),
22
+ request: vi.fn(),
23
+ parseMethodResponse: vi.fn(),
24
+ };
25
+ // Mock logger (silent)
26
+ mockLogger = {
27
+ debug: vi.fn(),
28
+ info: vi.fn(),
29
+ warn: vi.fn(),
30
+ error: vi.fn(),
31
+ };
32
+ // Register all tools
33
+ registerThreadTools(mockServer, mockJmapClient, mockLogger);
34
+ });
35
+ describe('get_thread', () => {
36
+ it('returns thread with emailIds array on success', async () => {
37
+ vi.mocked(mockJmapClient.request).mockResolvedValue({
38
+ methodResponses: [
39
+ [
40
+ 'Thread/get',
41
+ {
42
+ accountId: 'account-1',
43
+ list: [{ id: 'thread-1', emailIds: ['email-1', 'email-2', 'email-3'] }],
44
+ notFound: [],
45
+ },
46
+ 'getThread',
47
+ ],
48
+ ],
49
+ });
50
+ vi.mocked(mockJmapClient.parseMethodResponse).mockReturnValue({
51
+ success: true,
52
+ data: {
53
+ accountId: 'account-1',
54
+ list: [{ id: 'thread-1', emailIds: ['email-1', 'email-2', 'email-3'] }],
55
+ notFound: [],
56
+ },
57
+ });
58
+ const handler = registeredTools.get('get_thread');
59
+ const result = await handler({ threadId: 'thread-1' });
60
+ expect(result.isError).toBeUndefined();
61
+ const parsed = JSON.parse(result.content[0].text);
62
+ expect(parsed).toEqual({
63
+ id: 'thread-1',
64
+ emailIds: ['email-1', 'email-2', 'email-3'],
65
+ });
66
+ });
67
+ it('returns error when thread not found (notFound array)', async () => {
68
+ vi.mocked(mockJmapClient.request).mockResolvedValue({
69
+ methodResponses: [
70
+ [
71
+ 'Thread/get',
72
+ { accountId: 'account-1', list: [], notFound: ['thread-nonexistent'] },
73
+ 'getThread',
74
+ ],
75
+ ],
76
+ });
77
+ vi.mocked(mockJmapClient.parseMethodResponse).mockReturnValue({
78
+ success: true,
79
+ data: { accountId: 'account-1', list: [], notFound: ['thread-nonexistent'] },
80
+ });
81
+ const handler = registeredTools.get('get_thread');
82
+ const result = await handler({ threadId: 'thread-nonexistent' });
83
+ expect(result.isError).toBe(true);
84
+ expect(result.content[0].text).toContain('Thread not found');
85
+ });
86
+ it('returns error when thread not found (empty list)', async () => {
87
+ vi.mocked(mockJmapClient.request).mockResolvedValue({
88
+ methodResponses: [
89
+ ['Thread/get', { accountId: 'account-1', list: [], notFound: [] }, 'getThread'],
90
+ ],
91
+ });
92
+ vi.mocked(mockJmapClient.parseMethodResponse).mockReturnValue({
93
+ success: true,
94
+ data: { accountId: 'account-1', list: [], notFound: [] },
95
+ });
96
+ const handler = registeredTools.get('get_thread');
97
+ const result = await handler({ threadId: 'thread-missing' });
98
+ expect(result.isError).toBe(true);
99
+ expect(result.content[0].text).toContain('Thread not found');
100
+ });
101
+ it('returns error on JMAP error', async () => {
102
+ vi.mocked(mockJmapClient.request).mockResolvedValue({
103
+ methodResponses: [
104
+ ['error', { type: 'serverError', description: 'Internal server error' }, 'getThread'],
105
+ ],
106
+ });
107
+ vi.mocked(mockJmapClient.parseMethodResponse).mockReturnValue({
108
+ success: false,
109
+ error: { type: 'serverError', description: 'Internal server error' },
110
+ });
111
+ const handler = registeredTools.get('get_thread');
112
+ const result = await handler({ threadId: 'thread-1' });
113
+ expect(result.isError).toBe(true);
114
+ expect(result.content[0].text).toContain('Failed to retrieve thread');
115
+ expect(result.content[0].text).toContain('Internal server error');
116
+ });
117
+ it('handles exception gracefully', async () => {
118
+ vi.mocked(mockJmapClient.request).mockRejectedValue(new Error('Network error'));
119
+ const handler = registeredTools.get('get_thread');
120
+ const result = await handler({ threadId: 'thread-1' });
121
+ expect(result.isError).toBe(true);
122
+ expect(result.content[0].text).toContain('Error retrieving thread');
123
+ expect(result.content[0].text).toContain('Network error');
124
+ });
125
+ });
126
+ describe('get_thread_emails', () => {
127
+ it('returns array of transformed emails on success', async () => {
128
+ const mockEmails = [
129
+ {
130
+ id: 'email-1',
131
+ blobId: 'blob-1',
132
+ threadId: 'thread-1',
133
+ mailboxIds: { inbox: true },
134
+ keywords: { $seen: true },
135
+ receivedAt: '2024-01-01T10:00:00Z',
136
+ subject: 'First email',
137
+ from: [{ name: 'Alice', email: 'alice@example.com' }],
138
+ to: [{ name: 'Bob', email: 'bob@example.com' }],
139
+ preview: 'First email content',
140
+ },
141
+ {
142
+ id: 'email-2',
143
+ blobId: 'blob-2',
144
+ threadId: 'thread-1',
145
+ mailboxIds: { inbox: true },
146
+ keywords: {},
147
+ receivedAt: '2024-01-01T11:00:00Z',
148
+ subject: 'Re: First email',
149
+ from: [{ name: 'Bob', email: 'bob@example.com' }],
150
+ to: [{ name: 'Alice', email: 'alice@example.com' }],
151
+ preview: 'Reply content',
152
+ },
153
+ ];
154
+ // First call: Thread/get
155
+ // Second call: Email/get
156
+ vi.mocked(mockJmapClient.request)
157
+ .mockResolvedValueOnce({
158
+ methodResponses: [
159
+ [
160
+ 'Thread/get',
161
+ {
162
+ accountId: 'account-1',
163
+ list: [{ id: 'thread-1', emailIds: ['email-1', 'email-2'] }],
164
+ notFound: [],
165
+ },
166
+ 'getThread',
167
+ ],
168
+ ],
169
+ })
170
+ .mockResolvedValueOnce({
171
+ methodResponses: [
172
+ ['Email/get', { accountId: 'account-1', list: mockEmails }, 'getEmails'],
173
+ ],
174
+ });
175
+ vi.mocked(mockJmapClient.parseMethodResponse)
176
+ .mockReturnValueOnce({
177
+ success: true,
178
+ data: {
179
+ accountId: 'account-1',
180
+ list: [{ id: 'thread-1', emailIds: ['email-1', 'email-2'] }],
181
+ notFound: [],
182
+ },
183
+ })
184
+ .mockReturnValueOnce({
185
+ success: true,
186
+ data: { accountId: 'account-1', list: mockEmails },
187
+ });
188
+ const handler = registeredTools.get('get_thread_emails');
189
+ const result = await handler({ threadId: 'thread-1' });
190
+ expect(result.isError).toBeUndefined();
191
+ const parsed = JSON.parse(result.content[0].text);
192
+ expect(parsed.threadId).toBe('thread-1');
193
+ expect(parsed.emails).toHaveLength(2);
194
+ expect(parsed.emails[0].id).toBe('email-1');
195
+ expect(parsed.emails[1].id).toBe('email-2');
196
+ // Check transformation worked (keywords -> boolean flags)
197
+ expect(parsed.emails[0].isRead).toBe(true);
198
+ expect(parsed.emails[1].isRead).toBe(false);
199
+ });
200
+ it('returns error when thread not found', async () => {
201
+ vi.mocked(mockJmapClient.request).mockResolvedValue({
202
+ methodResponses: [
203
+ [
204
+ 'Thread/get',
205
+ { accountId: 'account-1', list: [], notFound: ['thread-nonexistent'] },
206
+ 'getThread',
207
+ ],
208
+ ],
209
+ });
210
+ vi.mocked(mockJmapClient.parseMethodResponse).mockReturnValue({
211
+ success: true,
212
+ data: { accountId: 'account-1', list: [], notFound: ['thread-nonexistent'] },
213
+ });
214
+ const handler = registeredTools.get('get_thread_emails');
215
+ const result = await handler({ threadId: 'thread-nonexistent' });
216
+ expect(result.isError).toBe(true);
217
+ expect(result.content[0].text).toContain('Thread not found');
218
+ });
219
+ it('returns empty array for empty thread (no emails)', async () => {
220
+ vi.mocked(mockJmapClient.request).mockResolvedValue({
221
+ methodResponses: [
222
+ [
223
+ 'Thread/get',
224
+ {
225
+ accountId: 'account-1',
226
+ list: [{ id: 'thread-empty', emailIds: [] }],
227
+ notFound: [],
228
+ },
229
+ 'getThread',
230
+ ],
231
+ ],
232
+ });
233
+ vi.mocked(mockJmapClient.parseMethodResponse).mockReturnValue({
234
+ success: true,
235
+ data: {
236
+ accountId: 'account-1',
237
+ list: [{ id: 'thread-empty', emailIds: [] }],
238
+ notFound: [],
239
+ },
240
+ });
241
+ const handler = registeredTools.get('get_thread_emails');
242
+ const result = await handler({ threadId: 'thread-empty' });
243
+ expect(result.isError).toBeUndefined();
244
+ const parsed = JSON.parse(result.content[0].text);
245
+ expect(parsed.threadId).toBe('thread-empty');
246
+ expect(parsed.emails).toEqual([]);
247
+ });
248
+ it('preserves emailIds order (oldest-first)', async () => {
249
+ // Note: emails returned from Email/get may be in different order than requested
250
+ // The tool should reorder them to match the original emailIds order
251
+ const mockEmails = [
252
+ {
253
+ id: 'email-3',
254
+ blobId: 'blob-3',
255
+ threadId: 'thread-1',
256
+ mailboxIds: { inbox: true },
257
+ keywords: {},
258
+ receivedAt: '2024-01-03T10:00:00Z',
259
+ subject: 'Third',
260
+ from: [],
261
+ to: [],
262
+ },
263
+ {
264
+ id: 'email-1',
265
+ blobId: 'blob-1',
266
+ threadId: 'thread-1',
267
+ mailboxIds: { inbox: true },
268
+ keywords: {},
269
+ receivedAt: '2024-01-01T10:00:00Z',
270
+ subject: 'First',
271
+ from: [],
272
+ to: [],
273
+ },
274
+ {
275
+ id: 'email-2',
276
+ blobId: 'blob-2',
277
+ threadId: 'thread-1',
278
+ mailboxIds: { inbox: true },
279
+ keywords: {},
280
+ receivedAt: '2024-01-02T10:00:00Z',
281
+ subject: 'Second',
282
+ from: [],
283
+ to: [],
284
+ },
285
+ ];
286
+ vi.mocked(mockJmapClient.request)
287
+ .mockResolvedValueOnce({
288
+ methodResponses: [
289
+ [
290
+ 'Thread/get',
291
+ {
292
+ accountId: 'account-1',
293
+ list: [{ id: 'thread-1', emailIds: ['email-1', 'email-2', 'email-3'] }],
294
+ notFound: [],
295
+ },
296
+ 'getThread',
297
+ ],
298
+ ],
299
+ })
300
+ .mockResolvedValueOnce({
301
+ methodResponses: [
302
+ // Emails returned in different order
303
+ ['Email/get', { accountId: 'account-1', list: mockEmails }, 'getEmails'],
304
+ ],
305
+ });
306
+ vi.mocked(mockJmapClient.parseMethodResponse)
307
+ .mockReturnValueOnce({
308
+ success: true,
309
+ data: {
310
+ accountId: 'account-1',
311
+ list: [{ id: 'thread-1', emailIds: ['email-1', 'email-2', 'email-3'] }],
312
+ notFound: [],
313
+ },
314
+ })
315
+ .mockReturnValueOnce({
316
+ success: true,
317
+ data: { accountId: 'account-1', list: mockEmails },
318
+ });
319
+ const handler = registeredTools.get('get_thread_emails');
320
+ const result = await handler({ threadId: 'thread-1' });
321
+ expect(result.isError).toBeUndefined();
322
+ const parsed = JSON.parse(result.content[0].text);
323
+ // Should be in order: email-1, email-2, email-3 (oldest-first per RFC 8621)
324
+ expect(parsed.emails[0].id).toBe('email-1');
325
+ expect(parsed.emails[1].id).toBe('email-2');
326
+ expect(parsed.emails[2].id).toBe('email-3');
327
+ });
328
+ it('returns error on Email/get failure after successful Thread/get', async () => {
329
+ vi.mocked(mockJmapClient.request)
330
+ .mockResolvedValueOnce({
331
+ methodResponses: [
332
+ [
333
+ 'Thread/get',
334
+ {
335
+ accountId: 'account-1',
336
+ list: [{ id: 'thread-1', emailIds: ['email-1'] }],
337
+ notFound: [],
338
+ },
339
+ 'getThread',
340
+ ],
341
+ ],
342
+ })
343
+ .mockResolvedValueOnce({
344
+ methodResponses: [
345
+ ['error', { type: 'serverError', description: 'Email fetch failed' }, 'getEmails'],
346
+ ],
347
+ });
348
+ vi.mocked(mockJmapClient.parseMethodResponse)
349
+ .mockReturnValueOnce({
350
+ success: true,
351
+ data: {
352
+ accountId: 'account-1',
353
+ list: [{ id: 'thread-1', emailIds: ['email-1'] }],
354
+ notFound: [],
355
+ },
356
+ })
357
+ .mockReturnValueOnce({
358
+ success: false,
359
+ error: { type: 'serverError', description: 'Email fetch failed' },
360
+ });
361
+ const handler = registeredTools.get('get_thread_emails');
362
+ const result = await handler({ threadId: 'thread-1' });
363
+ expect(result.isError).toBe(true);
364
+ expect(result.content[0].text).toContain('Failed to retrieve thread emails');
365
+ expect(result.content[0].text).toContain('Email fetch failed');
366
+ });
367
+ it('handles exception gracefully', async () => {
368
+ vi.mocked(mockJmapClient.request).mockRejectedValue(new Error('Connection timeout'));
369
+ const handler = registeredTools.get('get_thread_emails');
370
+ const result = await handler({ threadId: 'thread-1' });
371
+ expect(result.isError).toBe(true);
372
+ expect(result.content[0].text).toContain('Error retrieving thread emails');
373
+ expect(result.content[0].text).toContain('Connection timeout');
374
+ });
375
+ });
376
+ describe('tool registration', () => {
377
+ it('registers both thread tools', () => {
378
+ expect(registeredTools.has('get_thread')).toBe(true);
379
+ expect(registeredTools.has('get_thread_emails')).toBe(true);
380
+ expect(registeredTools.size).toBe(2);
381
+ });
382
+ });
383
+ });
384
+ //# sourceMappingURL=thread.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.test.js","sourceRoot":"","sources":["../../../src/mcp/tools/thread.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};