@floriscornel/teams-mcp 0.2.0 → 0.3.1

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 CHANGED
@@ -66,7 +66,59 @@ To use this MCP server in Cursor/Claude/VS Code, add the following configuration
66
66
  - Get recent messages with advanced filtering options
67
67
  - Find messages mentioning specific users
68
68
 
69
+ ## Rich Message Formatting Support
69
70
 
71
+ The following tools now support rich message formatting in Teams channels and chats:
72
+ - `send_channel_message`
73
+ - `send_chat_message`
74
+ - `reply_to_channel_message`
75
+
76
+ ### Format Options
77
+
78
+ You can specify the `format` parameter to control the message formatting:
79
+ - `text` (default): Plain text
80
+ - `markdown`: Markdown formatting (bold, italic, lists, links, code, etc.) - converted to sanitized HTML
81
+
82
+ When `format` is set to `markdown`, the message content is converted to HTML using a secure markdown parser and sanitized to remove potentially dangerous content before being sent to Teams.
83
+
84
+ If `format` is not specified, the message will be sent as plain text.
85
+
86
+ ### Example Usage
87
+
88
+ ```json
89
+ {
90
+ "teamId": "...",
91
+ "channelId": "...",
92
+ "message": "**Bold text** and _italic text_\n\n- List item 1\n- List item 2\n\n[Link](https://example.com)",
93
+ "format": "markdown"
94
+ }
95
+ ```
96
+
97
+ ```json
98
+ {
99
+ "chatId": "...",
100
+ "message": "Simple plain text message",
101
+ "format": "text"
102
+ }
103
+ ```
104
+
105
+ ### Security Features
106
+
107
+ - **HTML Sanitization**: All markdown content is converted to HTML and sanitized to remove potentially dangerous elements (scripts, event handlers, etc.)
108
+ - **Allowed Tags**: Only safe HTML tags are permitted (p, strong, em, a, ul, ol, li, h1-h6, code, pre, etc.)
109
+ - **Safe Attributes**: Only safe attributes are allowed (href, target, src, alt, title, width, height)
110
+ - **XSS Prevention**: Content is automatically sanitized to prevent cross-site scripting attacks
111
+
112
+ ### Supported Markdown Features
113
+
114
+ - **Text formatting**: Bold (`**text**`), italic (`_text_`), strikethrough (`~~text~~`)
115
+ - **Links**: `[text](url)`
116
+ - **Lists**: Bulleted (`- item`) and numbered (`1. item`)
117
+ - **Code**: Inline `` `code` `` and blocks ``` ```code``` ```
118
+ - **Headings**: `# H1` through `###### H6`
119
+ - **Line breaks**: Automatic conversion of newlines to `<br>` tags
120
+ - **Blockquotes**: `> quoted text`
121
+ - **Tables**: GitHub-flavored markdown tables
70
122
 
71
123
  ## 📦 Installation
72
124
 
package/dist/index.js CHANGED
@@ -110,7 +110,7 @@ async function startMcpServer() {
110
110
  // Create MCP server
111
111
  const server = new McpServer({
112
112
  name: "teams-mcp",
113
- version: "0.2.0",
113
+ version: "0.3.1",
114
114
  });
115
115
  // Initialize Graph service (singleton)
116
116
  const graphService = GraphService.getInstance();
@@ -1 +1 @@
1
- {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAYzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA4R9E"}
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAczD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA4W9E"}
@@ -1,4 +1,6 @@
1
1
  import { z } from "zod";
2
+ import { markdownToHtml } from "../utils/markdown.js";
3
+ import { processMentionsInHtml } from "../utils/users.js";
2
4
  export function registerChatTools(server, graphService) {
3
5
  // List user's chats
4
6
  server.tool("list_chats", {}, async () => {
@@ -153,37 +155,102 @@ export function registerChatTools(server, graphService) {
153
155
  chatId: z.string().describe("Chat ID"),
154
156
  message: z.string().describe("Message content"),
155
157
  importance: z.enum(["normal", "high", "urgent"]).optional().describe("Message importance"),
156
- }, async ({ chatId, message, importance = "normal" }) => {
158
+ format: z.enum(["text", "markdown"]).optional().describe("Message format (text or markdown)"),
159
+ mentions: z
160
+ .array(z.object({
161
+ mention: z
162
+ .string()
163
+ .describe("The @mention text (e.g., 'john.doe' or 'john.doe@company.com')"),
164
+ userId: z.string().describe("Azure AD User ID of the mentioned user"),
165
+ }))
166
+ .optional()
167
+ .describe("Array of @mentions to include in the message"),
168
+ }, async ({ chatId, message, importance = "normal", format = "text", mentions }) => {
157
169
  try {
158
170
  const client = await graphService.getClient();
159
- const newMessage = {
171
+ // Process message content based on format
172
+ let content;
173
+ let contentType;
174
+ if (format === "markdown") {
175
+ content = await markdownToHtml(message);
176
+ contentType = "html";
177
+ }
178
+ else {
179
+ content = message;
180
+ contentType = "text";
181
+ }
182
+ // Process @mentions if provided
183
+ const mentionMappings = [];
184
+ if (mentions && mentions.length > 0) {
185
+ // Convert provided mentions to mappings with display names
186
+ for (const mention of mentions) {
187
+ try {
188
+ // Get user info to get display name
189
+ const userResponse = await client
190
+ .api(`/users/${mention.userId}`)
191
+ .select("displayName")
192
+ .get();
193
+ mentionMappings.push({
194
+ mention: mention.mention,
195
+ userId: mention.userId,
196
+ displayName: userResponse.displayName || mention.mention,
197
+ });
198
+ }
199
+ catch (error) {
200
+ console.warn(`Could not resolve user ${mention.userId}, using mention text as display name`);
201
+ mentionMappings.push({
202
+ mention: mention.mention,
203
+ userId: mention.userId,
204
+ displayName: mention.mention,
205
+ });
206
+ }
207
+ }
208
+ }
209
+ // Process mentions in HTML content
210
+ let finalMentions = [];
211
+ if (mentionMappings.length > 0) {
212
+ const result = processMentionsInHtml(content, mentionMappings);
213
+ content = result.content;
214
+ finalMentions = result.mentions;
215
+ // Ensure we're using HTML content type when mentions are present
216
+ contentType = "html";
217
+ }
218
+ // Build message payload
219
+ const messagePayload = {
160
220
  body: {
161
- content: message,
162
- contentType: "text",
221
+ content,
222
+ contentType,
163
223
  },
164
- importance: importance,
224
+ importance,
165
225
  };
226
+ if (finalMentions.length > 0) {
227
+ messagePayload.mentions = finalMentions;
228
+ }
166
229
  const result = (await client
167
230
  .api(`/me/chats/${chatId}/messages`)
168
- .post(newMessage));
231
+ .post(messagePayload));
232
+ // Build success message
233
+ const successText = `✅ Message sent successfully. Message ID: ${result.id}${finalMentions.length > 0
234
+ ? `\n📱 Mentions: ${finalMentions.map((m) => m.mentionText).join(", ")}`
235
+ : ""}`;
169
236
  return {
170
237
  content: [
171
238
  {
172
239
  type: "text",
173
- text: `✅ Message sent successfully. Message ID: ${result?.id}`,
240
+ text: successText,
174
241
  },
175
242
  ],
176
243
  };
177
244
  }
178
245
  catch (error) {
179
- const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
180
246
  return {
181
247
  content: [
182
248
  {
183
249
  type: "text",
184
- text: `❌ Error: ${errorMessage}`,
250
+ text: `❌ Failed to send message: ${error.message}`,
185
251
  },
186
252
  ],
253
+ isError: true,
187
254
  };
188
255
  }
189
256
  });
@@ -1 +1 @@
1
- {"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAazD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA8Z/E"}
1
+ {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QAkyB/E"}
@@ -1,4 +1,7 @@
1
1
  import { z } from "zod";
2
+ import { imageUrlToBase64, isValidImageType, uploadImageAsHostedContent, } from "../utils/attachments.js";
3
+ import { markdownToHtml } from "../utils/markdown.js";
4
+ import { processMentionsInHtml, searchUsers } from "../utils/users.js";
2
5
  export function registerTeamsTools(server, graphService) {
3
6
  // List user's teams
4
7
  server.tool("list_teams", {}, async () => {
@@ -163,37 +166,162 @@ export function registerTeamsTools(server, graphService) {
163
166
  channelId: z.string().describe("Channel ID"),
164
167
  message: z.string().describe("Message content"),
165
168
  importance: z.enum(["normal", "high", "urgent"]).optional().describe("Message importance"),
166
- }, async ({ teamId, channelId, message, importance = "normal" }) => {
169
+ format: z.enum(["text", "markdown"]).optional().describe("Message format (text or markdown)"),
170
+ mentions: z
171
+ .array(z.object({
172
+ mention: z
173
+ .string()
174
+ .describe("The @mention text (e.g., 'john.doe' or 'john.doe@company.com')"),
175
+ userId: z.string().describe("Azure AD User ID of the mentioned user"),
176
+ }))
177
+ .optional()
178
+ .describe("Array of @mentions to include in the message"),
179
+ imageUrl: z.string().optional().describe("URL of an image to attach to the message"),
180
+ imageData: z.string().optional().describe("Base64 encoded image data to attach"),
181
+ imageContentType: z
182
+ .string()
183
+ .optional()
184
+ .describe("MIME type of the image (e.g., 'image/jpeg', 'image/png')"),
185
+ imageFileName: z.string().optional().describe("Name for the attached image file"),
186
+ }, async ({ teamId, channelId, message, importance = "normal", format = "text", mentions, imageUrl, imageData, imageContentType, imageFileName, }) => {
167
187
  try {
168
188
  const client = await graphService.getClient();
169
- const newMessage = {
189
+ // Process message content based on format
190
+ let content;
191
+ let contentType;
192
+ if (format === "markdown") {
193
+ content = await markdownToHtml(message);
194
+ contentType = "html";
195
+ }
196
+ else {
197
+ content = message;
198
+ contentType = "text";
199
+ }
200
+ // Process @mentions if provided
201
+ const mentionMappings = [];
202
+ if (mentions && mentions.length > 0) {
203
+ // Convert provided mentions to mappings with display names
204
+ for (const mention of mentions) {
205
+ try {
206
+ // Get user info to get display name
207
+ const userResponse = await client
208
+ .api(`/users/${mention.userId}`)
209
+ .select("displayName")
210
+ .get();
211
+ mentionMappings.push({
212
+ mention: mention.mention,
213
+ userId: mention.userId,
214
+ displayName: userResponse.displayName || mention.mention,
215
+ });
216
+ }
217
+ catch (error) {
218
+ console.warn(`Could not resolve user ${mention.userId}, using mention text as display name`);
219
+ mentionMappings.push({
220
+ mention: mention.mention,
221
+ userId: mention.userId,
222
+ displayName: mention.mention,
223
+ });
224
+ }
225
+ }
226
+ }
227
+ // Process mentions in HTML content
228
+ let finalMentions = [];
229
+ if (mentionMappings.length > 0) {
230
+ const result = processMentionsInHtml(content, mentionMappings);
231
+ content = result.content;
232
+ finalMentions = result.mentions;
233
+ // Ensure we're using HTML content type when mentions are present
234
+ contentType = "html";
235
+ }
236
+ // Handle image attachment
237
+ const attachments = [];
238
+ if (imageUrl || imageData) {
239
+ let imageInfo = null;
240
+ if (imageUrl) {
241
+ imageInfo = await imageUrlToBase64(imageUrl);
242
+ if (!imageInfo) {
243
+ return {
244
+ content: [
245
+ {
246
+ type: "text",
247
+ text: `❌ Failed to download image from URL: ${imageUrl}`,
248
+ },
249
+ ],
250
+ isError: true,
251
+ };
252
+ }
253
+ }
254
+ else if (imageData && imageContentType) {
255
+ if (!isValidImageType(imageContentType)) {
256
+ return {
257
+ content: [
258
+ {
259
+ type: "text",
260
+ text: `❌ Unsupported image type: ${imageContentType}`,
261
+ },
262
+ ],
263
+ isError: true,
264
+ };
265
+ }
266
+ imageInfo = { data: imageData, contentType: imageContentType };
267
+ }
268
+ if (imageInfo) {
269
+ const uploadResult = await uploadImageAsHostedContent(graphService, teamId, channelId, imageInfo.data, imageInfo.contentType, imageFileName);
270
+ if (uploadResult) {
271
+ attachments.push(uploadResult.attachment);
272
+ }
273
+ else {
274
+ return {
275
+ content: [
276
+ {
277
+ type: "text",
278
+ text: "❌ Failed to upload image attachment",
279
+ },
280
+ ],
281
+ isError: true,
282
+ };
283
+ }
284
+ }
285
+ }
286
+ // Build message payload
287
+ const messagePayload = {
170
288
  body: {
171
- content: message,
172
- contentType: "text",
289
+ content,
290
+ contentType,
173
291
  },
174
- importance: importance,
292
+ importance,
175
293
  };
294
+ if (finalMentions.length > 0) {
295
+ messagePayload.mentions = finalMentions;
296
+ }
297
+ if (attachments.length > 0) {
298
+ messagePayload.attachments = attachments;
299
+ }
176
300
  const result = (await client
177
301
  .api(`/teams/${teamId}/channels/${channelId}/messages`)
178
- .post(newMessage));
302
+ .post(messagePayload));
303
+ // Build success message
304
+ const successText = `✅ Message sent successfully. Message ID: ${result.id}${finalMentions.length > 0
305
+ ? `\n📱 Mentions: ${finalMentions.map((m) => m.mentionText).join(", ")}`
306
+ : ""}${attachments.length > 0 ? `\n🖼️ Image attached: ${attachments[0].name}` : ""}`;
179
307
  return {
180
308
  content: [
181
309
  {
182
310
  type: "text",
183
- text: `✅ Message sent successfully. Message ID: ${result?.id}`,
311
+ text: successText,
184
312
  },
185
313
  ],
186
314
  };
187
315
  }
188
316
  catch (error) {
189
- const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
190
317
  return {
191
318
  content: [
192
319
  {
193
320
  type: "text",
194
- text: `❌ Error: ${errorMessage}`,
321
+ text: `❌ Failed to send message: ${error.message}`,
195
322
  },
196
323
  ],
324
+ isError: true,
197
325
  };
198
326
  }
199
327
  });
@@ -274,37 +402,162 @@ export function registerTeamsTools(server, graphService) {
274
402
  messageId: z.string().describe("Message ID to reply to"),
275
403
  message: z.string().describe("Reply content"),
276
404
  importance: z.enum(["normal", "high", "urgent"]).optional().describe("Message importance"),
277
- }, async ({ teamId, channelId, messageId, message, importance = "normal" }) => {
405
+ format: z.enum(["text", "markdown"]).optional().describe("Message format (text or markdown)"),
406
+ mentions: z
407
+ .array(z.object({
408
+ mention: z
409
+ .string()
410
+ .describe("The @mention text (e.g., 'john.doe' or 'john.doe@company.com')"),
411
+ userId: z.string().describe("Azure AD User ID of the mentioned user"),
412
+ }))
413
+ .optional()
414
+ .describe("Array of @mentions to include in the reply"),
415
+ imageUrl: z.string().optional().describe("URL of an image to attach to the reply"),
416
+ imageData: z.string().optional().describe("Base64 encoded image data to attach"),
417
+ imageContentType: z
418
+ .string()
419
+ .optional()
420
+ .describe("MIME type of the image (e.g., 'image/jpeg', 'image/png')"),
421
+ imageFileName: z.string().optional().describe("Name for the attached image file"),
422
+ }, async ({ teamId, channelId, messageId, message, importance = "normal", format = "text", mentions, imageUrl, imageData, imageContentType, imageFileName, }) => {
278
423
  try {
279
424
  const client = await graphService.getClient();
280
- const newReply = {
425
+ // Process message content based on format
426
+ let content;
427
+ let contentType;
428
+ if (format === "markdown") {
429
+ content = await markdownToHtml(message);
430
+ contentType = "html";
431
+ }
432
+ else {
433
+ content = message;
434
+ contentType = "text";
435
+ }
436
+ // Process @mentions if provided
437
+ const mentionMappings = [];
438
+ if (mentions && mentions.length > 0) {
439
+ // Convert provided mentions to mappings with display names
440
+ for (const mention of mentions) {
441
+ try {
442
+ // Get user info to get display name
443
+ const userResponse = await client
444
+ .api(`/users/${mention.userId}`)
445
+ .select("displayName")
446
+ .get();
447
+ mentionMappings.push({
448
+ mention: mention.mention,
449
+ userId: mention.userId,
450
+ displayName: userResponse.displayName || mention.mention,
451
+ });
452
+ }
453
+ catch (error) {
454
+ console.warn(`Could not resolve user ${mention.userId}, using mention text as display name`);
455
+ mentionMappings.push({
456
+ mention: mention.mention,
457
+ userId: mention.userId,
458
+ displayName: mention.mention,
459
+ });
460
+ }
461
+ }
462
+ }
463
+ // Process mentions in HTML content
464
+ let finalMentions = [];
465
+ if (mentionMappings.length > 0) {
466
+ const result = processMentionsInHtml(content, mentionMappings);
467
+ content = result.content;
468
+ finalMentions = result.mentions;
469
+ // Ensure we're using HTML content type when mentions are present
470
+ contentType = "html";
471
+ }
472
+ // Handle image attachment
473
+ const attachments = [];
474
+ if (imageUrl || imageData) {
475
+ let imageInfo = null;
476
+ if (imageUrl) {
477
+ imageInfo = await imageUrlToBase64(imageUrl);
478
+ if (!imageInfo) {
479
+ return {
480
+ content: [
481
+ {
482
+ type: "text",
483
+ text: `❌ Failed to download image from URL: ${imageUrl}`,
484
+ },
485
+ ],
486
+ isError: true,
487
+ };
488
+ }
489
+ }
490
+ else if (imageData && imageContentType) {
491
+ if (!isValidImageType(imageContentType)) {
492
+ return {
493
+ content: [
494
+ {
495
+ type: "text",
496
+ text: `❌ Unsupported image type: ${imageContentType}`,
497
+ },
498
+ ],
499
+ isError: true,
500
+ };
501
+ }
502
+ imageInfo = { data: imageData, contentType: imageContentType };
503
+ }
504
+ if (imageInfo) {
505
+ const uploadResult = await uploadImageAsHostedContent(graphService, teamId, channelId, imageInfo.data, imageInfo.contentType, imageFileName);
506
+ if (uploadResult) {
507
+ attachments.push(uploadResult.attachment);
508
+ }
509
+ else {
510
+ return {
511
+ content: [
512
+ {
513
+ type: "text",
514
+ text: "❌ Failed to upload image attachment",
515
+ },
516
+ ],
517
+ isError: true,
518
+ };
519
+ }
520
+ }
521
+ }
522
+ // Build message payload
523
+ const messagePayload = {
281
524
  body: {
282
- content: message,
283
- contentType: "text",
525
+ content,
526
+ contentType,
284
527
  },
285
- importance: importance,
528
+ importance,
286
529
  };
530
+ if (finalMentions.length > 0) {
531
+ messagePayload.mentions = finalMentions;
532
+ }
533
+ if (attachments.length > 0) {
534
+ messagePayload.attachments = attachments;
535
+ }
287
536
  const result = (await client
288
537
  .api(`/teams/${teamId}/channels/${channelId}/messages/${messageId}/replies`)
289
- .post(newReply));
538
+ .post(messagePayload));
539
+ // Build success message
540
+ const successText = `✅ Reply sent successfully. Reply ID: ${result.id}${finalMentions.length > 0
541
+ ? `\n📱 Mentions: ${finalMentions.map((m) => m.mentionText).join(", ")}`
542
+ : ""}${attachments.length > 0 ? `\n🖼️ Image attached: ${attachments[0].name}` : ""}`;
290
543
  return {
291
544
  content: [
292
545
  {
293
546
  type: "text",
294
- text: `✅ Reply sent successfully. Reply ID: ${result?.id}`,
547
+ text: successText,
295
548
  },
296
549
  ],
297
550
  };
298
551
  }
299
552
  catch (error) {
300
- const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
301
553
  return {
302
554
  content: [
303
555
  {
304
556
  type: "text",
305
- text: `❌ Error: ${errorMessage}`,
557
+ text: `❌ Failed to send reply: ${error.message}`,
306
558
  },
307
559
  ],
560
+ isError: true,
308
561
  };
309
562
  }
310
563
  });
@@ -353,5 +606,59 @@ export function registerTeamsTools(server, graphService) {
353
606
  };
354
607
  }
355
608
  });
609
+ // Search users for @mentions
610
+ server.tool("search_users_for_mentions", {
611
+ query: z.string().describe("Search query (name or email)"),
612
+ limit: z
613
+ .number()
614
+ .min(1)
615
+ .max(50)
616
+ .optional()
617
+ .default(10)
618
+ .describe("Maximum number of results to return"),
619
+ }, async ({ query, limit }) => {
620
+ try {
621
+ const users = await searchUsers(graphService, query, limit);
622
+ if (users.length === 0) {
623
+ return {
624
+ content: [
625
+ {
626
+ type: "text",
627
+ text: `No users found matching "${query}".`,
628
+ },
629
+ ],
630
+ };
631
+ }
632
+ return {
633
+ content: [
634
+ {
635
+ type: "text",
636
+ text: JSON.stringify({
637
+ query,
638
+ totalResults: users.length,
639
+ users: users.map((user) => ({
640
+ id: user.id,
641
+ displayName: user.displayName,
642
+ userPrincipalName: user.userPrincipalName,
643
+ mentionText: user.userPrincipalName?.split("@")[0] ||
644
+ user.displayName.toLowerCase().replace(/\s+/g, ""),
645
+ })),
646
+ }, null, 2),
647
+ },
648
+ ],
649
+ };
650
+ }
651
+ catch (error) {
652
+ const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
653
+ return {
654
+ content: [
655
+ {
656
+ type: "text",
657
+ text: `❌ Error: ${errorMessage}`,
658
+ },
659
+ ],
660
+ };
661
+ }
662
+ });
356
663
  }
357
664
  //# sourceMappingURL=teams.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { GraphService } from "../services/graph.js";
2
+ export interface ImageAttachment {
3
+ id: string;
4
+ contentType: string;
5
+ contentUrl?: string;
6
+ name?: string;
7
+ thumbnailUrl?: string;
8
+ }
9
+ export interface HostedContent {
10
+ "@microsoft.graph.temporaryId": string;
11
+ contentBytes: string;
12
+ contentType: string;
13
+ }
14
+ /**
15
+ * Upload image as hosted content for Teams messages
16
+ * This creates a temporary hosted content that can be referenced in message attachments
17
+ */
18
+ export declare function uploadImageAsHostedContent(graphService: GraphService, teamId: string, channelId: string, imageData: Buffer | string, contentType: string, fileName?: string): Promise<{
19
+ hostedContentId: string;
20
+ attachment: ImageAttachment;
21
+ } | null>;
22
+ /**
23
+ * Validate image content type
24
+ */
25
+ export declare function isValidImageType(contentType: string): boolean;
26
+ /**
27
+ * Get file extension from MIME type
28
+ */
29
+ export declare function getFileExtensionFromMimeType(mimeType: string): string;
30
+ /**
31
+ * Convert image URL to base64 for upload
32
+ */
33
+ export declare function imageUrlToBase64(imageUrl: string): Promise<{
34
+ data: string;
35
+ contentType: string;
36
+ } | null>;
37
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/utils/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,8BAA8B,EAAE,MAAM,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,CAkC1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAY7D;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYrE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA0BvD"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Upload image as hosted content for Teams messages
3
+ * This creates a temporary hosted content that can be referenced in message attachments
4
+ */
5
+ export async function uploadImageAsHostedContent(graphService, teamId, channelId, imageData, contentType, fileName) {
6
+ try {
7
+ const client = await graphService.getClient();
8
+ // Convert Buffer to base64 if needed
9
+ const contentBytes = typeof imageData === "string" ? imageData : imageData.toString("base64");
10
+ // Create hosted content
11
+ const hostedContent = {
12
+ "@microsoft.graph.temporaryId": `temp_${Date.now()}_${Math.random().toString(36).substring(7)}`,
13
+ contentBytes,
14
+ contentType,
15
+ };
16
+ // Upload hosted content
17
+ const response = await client
18
+ .api(`/teams/${teamId}/channels/${channelId}/messages/hostedContents`)
19
+ .post(hostedContent);
20
+ const hostedContentId = response.id;
21
+ // Create attachment reference
22
+ const attachment = {
23
+ id: hostedContentId,
24
+ contentType,
25
+ contentUrl: `https://graph.microsoft.com/v1.0/teams/${teamId}/channels/${channelId}/messages/hostedContents/${hostedContentId}/$value`,
26
+ name: fileName || `image.${getFileExtensionFromMimeType(contentType)}`,
27
+ };
28
+ return { hostedContentId, attachment };
29
+ }
30
+ catch (error) {
31
+ console.error("Error uploading image as hosted content:", error);
32
+ return null;
33
+ }
34
+ }
35
+ /**
36
+ * Validate image content type
37
+ */
38
+ export function isValidImageType(contentType) {
39
+ const validTypes = [
40
+ "image/jpeg",
41
+ "image/jpg",
42
+ "image/png",
43
+ "image/gif",
44
+ "image/webp",
45
+ "image/bmp",
46
+ "image/svg+xml",
47
+ ];
48
+ return validTypes.includes(contentType.toLowerCase());
49
+ }
50
+ /**
51
+ * Get file extension from MIME type
52
+ */
53
+ export function getFileExtensionFromMimeType(mimeType) {
54
+ const extensions = {
55
+ "image/jpeg": "jpg",
56
+ "image/jpg": "jpg",
57
+ "image/png": "png",
58
+ "image/gif": "gif",
59
+ "image/webp": "webp",
60
+ "image/bmp": "bmp",
61
+ "image/svg+xml": "svg",
62
+ };
63
+ return extensions[mimeType.toLowerCase()] || "img";
64
+ }
65
+ /**
66
+ * Convert image URL to base64 for upload
67
+ */
68
+ export async function imageUrlToBase64(imageUrl) {
69
+ try {
70
+ const response = await fetch(imageUrl);
71
+ if (!response.ok) {
72
+ throw new Error(`Failed to fetch image: ${response.statusText}`);
73
+ }
74
+ const contentType = response.headers.get("content-type") || "image/jpeg";
75
+ if (!isValidImageType(contentType)) {
76
+ throw new Error(`Unsupported image type: ${contentType}`);
77
+ }
78
+ const arrayBuffer = await response.arrayBuffer();
79
+ const buffer = Buffer.from(arrayBuffer);
80
+ const base64Data = buffer.toString("base64");
81
+ return {
82
+ data: base64Data,
83
+ contentType,
84
+ };
85
+ }
86
+ catch (error) {
87
+ console.error("Error converting image URL to base64:", error);
88
+ return null;
89
+ }
90
+ }
91
+ //# sourceMappingURL=attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/utils/attachments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Converts Markdown text to sanitized HTML
3
+ * @param markdown The markdown text to convert
4
+ * @returns Sanitized HTML string
5
+ */
6
+ export declare function markdownToHtml(markdown: string): Promise<string>;
7
+ /**
8
+ * Basic HTML sanitization for user-provided HTML content
9
+ * @param html The HTML content to sanitize
10
+ * @returns Sanitized HTML string
11
+ */
12
+ export declare function sanitizeHtml(html: string): string;
13
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0CtE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoCjD"}
@@ -0,0 +1,100 @@
1
+ import DOMPurify from "dompurify";
2
+ import { JSDOM } from "jsdom";
3
+ import { marked } from "marked";
4
+ // Create a JSDOM window for DOMPurify in Node.js environment
5
+ const window = new JSDOM("").window;
6
+ const createDOMPurify = DOMPurify(window);
7
+ // Configure marked for Teams compatibility
8
+ marked.setOptions({
9
+ gfm: true, // GitHub Flavored Markdown
10
+ breaks: true, // Convert \n to <br>
11
+ });
12
+ /**
13
+ * Converts Markdown text to sanitized HTML
14
+ * @param markdown The markdown text to convert
15
+ * @returns Sanitized HTML string
16
+ */
17
+ export async function markdownToHtml(markdown) {
18
+ // Convert Markdown to HTML
19
+ const rawHtml = await marked(markdown);
20
+ // Sanitize HTML for security - allow common formatting tags safe for Teams
21
+ const cleanHtml = createDOMPurify.sanitize(rawHtml, {
22
+ ALLOWED_TAGS: [
23
+ "p",
24
+ "br",
25
+ "strong",
26
+ "em",
27
+ "b",
28
+ "i",
29
+ "u",
30
+ "s",
31
+ "del",
32
+ "a",
33
+ "ul",
34
+ "ol",
35
+ "li",
36
+ "h1",
37
+ "h2",
38
+ "h3",
39
+ "h4",
40
+ "h5",
41
+ "h6",
42
+ "blockquote",
43
+ "code",
44
+ "pre",
45
+ "hr",
46
+ "table",
47
+ "thead",
48
+ "tbody",
49
+ "tr",
50
+ "th",
51
+ "td",
52
+ "img",
53
+ ],
54
+ ALLOWED_ATTR: ["href", "target", "src", "alt", "title", "width", "height"],
55
+ });
56
+ return cleanHtml;
57
+ }
58
+ /**
59
+ * Basic HTML sanitization for user-provided HTML content
60
+ * @param html The HTML content to sanitize
61
+ * @returns Sanitized HTML string
62
+ */
63
+ export function sanitizeHtml(html) {
64
+ return createDOMPurify.sanitize(html, {
65
+ ALLOWED_TAGS: [
66
+ "p",
67
+ "br",
68
+ "strong",
69
+ "em",
70
+ "b",
71
+ "i",
72
+ "u",
73
+ "s",
74
+ "del",
75
+ "a",
76
+ "ul",
77
+ "ol",
78
+ "li",
79
+ "h1",
80
+ "h2",
81
+ "h3",
82
+ "h4",
83
+ "h5",
84
+ "h6",
85
+ "blockquote",
86
+ "code",
87
+ "pre",
88
+ "hr",
89
+ "table",
90
+ "thead",
91
+ "tbody",
92
+ "tr",
93
+ "th",
94
+ "td",
95
+ "img",
96
+ ],
97
+ ALLOWED_ATTR: ["href", "target", "src", "alt", "title", "width", "height"],
98
+ });
99
+ }
100
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,6DAA6D;AAC7D,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AACpC,MAAM,eAAe,GAAG,SAAS,CAAC,MAAa,CAAC,CAAC;AAEjD,2CAA2C;AAC3C,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,IAAI,EAAE,2BAA2B;IACtC,MAAM,EAAE,IAAI,EAAE,qBAAqB;CACpC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,2BAA2B;IAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvC,2EAA2E;IAC3E,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE;QAClD,YAAY,EAAE;YACZ,GAAG;YACH,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,KAAK;YACL,GAAG;YACH,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,YAAY;YACZ,MAAM;YACN,KAAK;YACL,IAAI;YACJ,OAAO;YACP,OAAO;YACP,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;SACN;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC3E,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE;QACpC,YAAY,EAAE;YACZ,GAAG;YACH,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,KAAK;YACL,GAAG;YACH,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,YAAY;YACZ,MAAM;YACN,KAAK;YACL,IAAI;YACJ,OAAO;YACP,OAAO;YACP,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;SACN;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC3E,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { GraphService } from "../services/graph.js";
2
+ export interface UserInfo {
3
+ id: string;
4
+ displayName: string;
5
+ userPrincipalName?: string;
6
+ }
7
+ /**
8
+ * Search for users by display name or email
9
+ */
10
+ export declare function searchUsers(graphService: GraphService, query: string, limit?: number): Promise<UserInfo[]>;
11
+ /**
12
+ * Get user by exact email or UPN
13
+ */
14
+ export declare function getUserByEmail(graphService: GraphService, email: string): Promise<UserInfo | null>;
15
+ /**
16
+ * Get user by ID
17
+ */
18
+ export declare function getUserById(graphService: GraphService, userId: string): Promise<UserInfo | null>;
19
+ /**
20
+ * Parse @mentions from text and return user lookup suggestions
21
+ * @param text - Message text containing @mentions
22
+ * @param graphService - Graph service instance
23
+ * @returns Array of mention patterns found and suggested users
24
+ */
25
+ export declare function parseMentions(text: string, graphService: GraphService): Promise<Array<{
26
+ mention: string;
27
+ users: UserInfo[];
28
+ }>>;
29
+ /**
30
+ * Generate HTML content with @mentions converted to proper format
31
+ */
32
+ export declare function processMentionsInHtml(html: string, mentionMappings: Array<{
33
+ mention: string;
34
+ userId: string;
35
+ displayName: string;
36
+ }>): {
37
+ content: string;
38
+ mentions: Array<{
39
+ id: number;
40
+ mentionText: string;
41
+ mentioned: {
42
+ user: {
43
+ id: string;
44
+ };
45
+ };
46
+ }>;
47
+ };
48
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/utils/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsBrB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAe1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAkB1B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,CAAC,CAiCxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/E;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE;YAAE,IAAI,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CAC3F,CA8BA"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Search for users by display name or email
3
+ */
4
+ export async function searchUsers(graphService, query, limit = 10) {
5
+ try {
6
+ const client = await graphService.getClient();
7
+ // Use filter query to search users by displayName or userPrincipalName
8
+ const searchQuery = `$filter=startswith(displayName,'${query}') or startswith(userPrincipalName,'${query}')&$top=${limit}&$select=id,displayName,userPrincipalName`;
9
+ const response = await client.api(`/users?${searchQuery}`).get();
10
+ if (!response?.value?.length) {
11
+ return [];
12
+ }
13
+ return response.value.map((user) => ({
14
+ id: user.id || "",
15
+ displayName: user.displayName || "Unknown User",
16
+ userPrincipalName: user.userPrincipalName || undefined,
17
+ }));
18
+ }
19
+ catch (error) {
20
+ console.error("Error searching users:", error);
21
+ return [];
22
+ }
23
+ }
24
+ /**
25
+ * Get user by exact email or UPN
26
+ */
27
+ export async function getUserByEmail(graphService, email) {
28
+ try {
29
+ const client = await graphService.getClient();
30
+ const response = await client.api(`/users/${email}`).get();
31
+ return {
32
+ id: response.id,
33
+ displayName: response.displayName || "Unknown User",
34
+ userPrincipalName: response.userPrincipalName,
35
+ };
36
+ }
37
+ catch (error) {
38
+ // User not found or access denied
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Get user by ID
44
+ */
45
+ export async function getUserById(graphService, userId) {
46
+ try {
47
+ const client = await graphService.getClient();
48
+ const response = await client
49
+ .api(`/users/${userId}`)
50
+ .select("id,displayName,userPrincipalName")
51
+ .get();
52
+ return {
53
+ id: response.id,
54
+ displayName: response.displayName || "Unknown User",
55
+ userPrincipalName: response.userPrincipalName,
56
+ };
57
+ }
58
+ catch (error) {
59
+ // User not found or access denied
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * Parse @mentions from text and return user lookup suggestions
65
+ * @param text - Message text containing @mentions
66
+ * @param graphService - Graph service instance
67
+ * @returns Array of mention patterns found and suggested users
68
+ */
69
+ export async function parseMentions(text, graphService) {
70
+ // Match @mentions in the format @username, @email@domain.com, or @"User Name"
71
+ const mentionRegex = /@(?:"([^"]+)"|([^\s@]+(?:@[^\s@]+\.[^\s@]+)?|[^\s@]+))/g;
72
+ const mentions = [];
73
+ let match = mentionRegex.exec(text);
74
+ while (match !== null) {
75
+ const mentionText = match[1] || match[2]; // Quoted name or unquoted
76
+ let users = [];
77
+ // If it looks like an email, try exact lookup first
78
+ if (mentionText.includes("@") && mentionText.includes(".")) {
79
+ const user = await getUserByEmail(graphService, mentionText);
80
+ if (user) {
81
+ users = [user];
82
+ }
83
+ }
84
+ // If no exact match found, search by name
85
+ if (users.length === 0) {
86
+ users = await searchUsers(graphService, mentionText, 5);
87
+ }
88
+ mentions.push({
89
+ mention: mentionText,
90
+ users,
91
+ });
92
+ match = mentionRegex.exec(text);
93
+ }
94
+ return mentions;
95
+ }
96
+ /**
97
+ * Generate HTML content with @mentions converted to proper format
98
+ */
99
+ export function processMentionsInHtml(html, mentionMappings) {
100
+ let processedContent = html;
101
+ const mentions = [];
102
+ mentionMappings.forEach((mapping, index) => {
103
+ // Replace @mention with HTML mention format
104
+ const mentionRegex = new RegExp(`@(?:"${escapeRegex(mapping.mention)}"|${escapeRegex(mapping.mention)})`, "g");
105
+ const mentionId = index;
106
+ processedContent = processedContent.replace(mentionRegex, `<at id="${mentionId}">${mapping.displayName}</at>`);
107
+ mentions.push({
108
+ id: mentionId,
109
+ mentionText: mapping.displayName,
110
+ mentioned: {
111
+ user: {
112
+ id: mapping.userId,
113
+ },
114
+ },
115
+ });
116
+ });
117
+ return { content: processedContent, mentions };
118
+ }
119
+ function escapeRegex(text) {
120
+ return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
121
+ }
122
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/utils/users.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,17 @@
1
1
  {
2
2
  "name": "@floriscornel/teams-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "MCP server for Microsoft Graph Teams integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
8
  "teams-mcp": "dist/index.js"
9
9
  },
10
- "files": ["dist/**/*", "README.md", "package.json"],
10
+ "files": [
11
+ "dist/**/*",
12
+ "README.md",
13
+ "package.json"
14
+ ],
11
15
  "publishConfig": {
12
16
  "access": "public"
13
17
  },
@@ -22,14 +26,20 @@
22
26
  "test": "vitest run",
23
27
  "test:watch": "vitest",
24
28
  "test:coverage": "vitest run --coverage",
29
+ "test:coverage:ci": "vitest run --coverage --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
25
30
  "test:ui": "vitest --ui",
26
31
  "lint": "biome check .",
27
- "lint:fix": "biome check --apply .",
32
+ "lint:fix": "biome check --write --unsafe .",
28
33
  "format": "biome format --write .",
29
34
  "bump": "npx npm-check-updates -u",
30
35
  "prepublishOnly": "npm run build"
31
36
  },
32
- "keywords": ["mcp", "microsoft-graph", "teams", "model-context-protocol"],
37
+ "keywords": [
38
+ "mcp",
39
+ "microsoft-graph",
40
+ "teams",
41
+ "model-context-protocol"
42
+ ],
33
43
  "author": "Floris Cornel",
34
44
  "license": "MIT",
35
45
  "repository": {
@@ -45,11 +55,17 @@
45
55
  "@microsoft/microsoft-graph-client": "^3.0.7",
46
56
  "@microsoft/microsoft-graph-types": "^2.40.0",
47
57
  "@modelcontextprotocol/sdk": "^1.12.1",
48
- "zod": "^3.25.51"
58
+ "@types/dompurify": "^3.2.0",
59
+ "@types/jsdom": "^21.1.7",
60
+ "@types/marked": "^6.0.0",
61
+ "dompurify": "^3.2.6",
62
+ "jsdom": "^26.1.0",
63
+ "marked": "^15.0.12",
64
+ "zod": "^3.25.55"
49
65
  },
50
66
  "devDependencies": {
51
67
  "@biomejs/biome": "^1.9.4",
52
- "@types/node": "^22.15.29",
68
+ "@types/node": "^22.15.30",
53
69
  "@types/sinon": "^17.0.4",
54
70
  "@vitest/coverage-v8": "^3.2.2",
55
71
  "msw": "^2.9.0",
@@ -58,28 +74,6 @@
58
74
  "typescript": "^5.8.3",
59
75
  "vitest": "^3.2.2"
60
76
  },
61
- "optionalDependencies": {
62
- "@biomejs/cli-darwin-arm64": "^1.9.4",
63
- "@biomejs/cli-darwin-x64": "^1.9.4",
64
- "@biomejs/cli-linux-arm64": "^1.9.4",
65
- "@biomejs/cli-linux-x64": "^1.9.4",
66
- "@biomejs/cli-win32-arm64": "^1.9.4",
67
- "@biomejs/cli-win32-x64": "^1.9.4",
68
- "@rollup/rollup-android-arm-eabi": "^4.0.0",
69
- "@rollup/rollup-android-arm64": "^4.0.0",
70
- "@rollup/rollup-darwin-arm64": "^4.0.0",
71
- "@rollup/rollup-darwin-x64": "^4.0.0",
72
- "@rollup/rollup-linux-arm-gnueabihf": "^4.0.0",
73
- "@rollup/rollup-linux-arm64-gnu": "^4.0.0",
74
- "@rollup/rollup-linux-arm64-musl": "^4.0.0",
75
- "@rollup/rollup-linux-riscv64-gnu": "^4.0.0",
76
- "@rollup/rollup-linux-s390x-gnu": "^4.0.0",
77
- "@rollup/rollup-linux-x64-gnu": "^4.0.0",
78
- "@rollup/rollup-linux-x64-musl": "^4.0.0",
79
- "@rollup/rollup-win32-arm64-msvc": "^4.0.0",
80
- "@rollup/rollup-win32-ia32-msvc": "^4.0.0",
81
- "@rollup/rollup-win32-x64-msvc": "^4.0.0"
82
- },
83
77
  "engines": {
84
78
  "node": ">=18.0.0"
85
79
  }