@framers/agentos 0.1.26 → 0.1.28

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 (79) hide show
  1. package/dist/api/AgentOSOrchestrator.js +1 -1
  2. package/dist/api/AgentOSOrchestrator.js.map +1 -1
  3. package/dist/channels/ChannelRouter.d.ts.map +1 -1
  4. package/dist/channels/ChannelRouter.js +1 -1
  5. package/dist/channels/ChannelRouter.js.map +1 -1
  6. package/dist/channels/IChannelAdapter.d.ts.map +1 -1
  7. package/dist/channels/adapters/BaseChannelAdapter.d.ts +130 -0
  8. package/dist/channels/adapters/BaseChannelAdapter.d.ts.map +1 -0
  9. package/dist/channels/adapters/BaseChannelAdapter.js +257 -0
  10. package/dist/channels/adapters/BaseChannelAdapter.js.map +1 -0
  11. package/dist/channels/adapters/DiscordChannelAdapter.d.ts +86 -0
  12. package/dist/channels/adapters/DiscordChannelAdapter.d.ts.map +1 -0
  13. package/dist/channels/adapters/DiscordChannelAdapter.js +550 -0
  14. package/dist/channels/adapters/DiscordChannelAdapter.js.map +1 -0
  15. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts +117 -0
  16. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts.map +1 -0
  17. package/dist/channels/adapters/GoogleChatChannelAdapter.js +632 -0
  18. package/dist/channels/adapters/GoogleChatChannelAdapter.js.map +1 -0
  19. package/dist/channels/adapters/IRCChannelAdapter.d.ts +86 -0
  20. package/dist/channels/adapters/IRCChannelAdapter.d.ts.map +1 -0
  21. package/dist/channels/adapters/IRCChannelAdapter.js +253 -0
  22. package/dist/channels/adapters/IRCChannelAdapter.js.map +1 -0
  23. package/dist/channels/adapters/RedditChannelAdapter.d.ts +123 -0
  24. package/dist/channels/adapters/RedditChannelAdapter.d.ts.map +1 -0
  25. package/dist/channels/adapters/RedditChannelAdapter.js +516 -0
  26. package/dist/channels/adapters/RedditChannelAdapter.js.map +1 -0
  27. package/dist/channels/adapters/SignalChannelAdapter.d.ts +120 -0
  28. package/dist/channels/adapters/SignalChannelAdapter.d.ts.map +1 -0
  29. package/dist/channels/adapters/SignalChannelAdapter.js +521 -0
  30. package/dist/channels/adapters/SignalChannelAdapter.js.map +1 -0
  31. package/dist/channels/adapters/SlackChannelAdapter.d.ts +96 -0
  32. package/dist/channels/adapters/SlackChannelAdapter.d.ts.map +1 -0
  33. package/dist/channels/adapters/SlackChannelAdapter.js +535 -0
  34. package/dist/channels/adapters/SlackChannelAdapter.js.map +1 -0
  35. package/dist/channels/adapters/TeamsChannelAdapter.d.ts +138 -0
  36. package/dist/channels/adapters/TeamsChannelAdapter.d.ts.map +1 -0
  37. package/dist/channels/adapters/TeamsChannelAdapter.js +639 -0
  38. package/dist/channels/adapters/TeamsChannelAdapter.js.map +1 -0
  39. package/dist/channels/adapters/TelegramChannelAdapter.d.ts +83 -0
  40. package/dist/channels/adapters/TelegramChannelAdapter.d.ts.map +1 -0
  41. package/dist/channels/adapters/TelegramChannelAdapter.js +463 -0
  42. package/dist/channels/adapters/TelegramChannelAdapter.js.map +1 -0
  43. package/dist/channels/adapters/TwitterChannelAdapter.d.ts +117 -0
  44. package/dist/channels/adapters/TwitterChannelAdapter.d.ts.map +1 -0
  45. package/dist/channels/adapters/TwitterChannelAdapter.js +489 -0
  46. package/dist/channels/adapters/TwitterChannelAdapter.js.map +1 -0
  47. package/dist/channels/adapters/WebChatChannelAdapter.d.ts +141 -0
  48. package/dist/channels/adapters/WebChatChannelAdapter.d.ts.map +1 -0
  49. package/dist/channels/adapters/WebChatChannelAdapter.js +539 -0
  50. package/dist/channels/adapters/WebChatChannelAdapter.js.map +1 -0
  51. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts +122 -0
  52. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts.map +1 -0
  53. package/dist/channels/adapters/WhatsAppChannelAdapter.js +643 -0
  54. package/dist/channels/adapters/WhatsAppChannelAdapter.js.map +1 -0
  55. package/dist/channels/adapters/index.d.ts +34 -0
  56. package/dist/channels/adapters/index.d.ts.map +1 -0
  57. package/dist/channels/adapters/index.js +25 -0
  58. package/dist/channels/adapters/index.js.map +1 -0
  59. package/dist/channels/index.d.ts +24 -0
  60. package/dist/channels/index.d.ts.map +1 -1
  61. package/dist/channels/index.js +16 -0
  62. package/dist/channels/index.js.map +1 -1
  63. package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts.map +1 -1
  64. package/dist/cognitive_substrate/personas/metaprompt_presets.js +0 -2
  65. package/dist/cognitive_substrate/personas/metaprompt_presets.js.map +1 -1
  66. package/dist/core/provenance/crypto/HashChain.d.ts.map +1 -1
  67. package/dist/core/provenance/enforcement/AutonomyGuard.d.ts.map +1 -1
  68. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts.map +1 -1
  69. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js +2 -1
  70. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js.map +1 -1
  71. package/dist/core/provenance/ledger/EventTypes.d.ts.map +1 -1
  72. package/dist/core/safety/ToolExecutionGuard.d.ts.map +1 -1
  73. package/dist/core/safety/ToolExecutionGuard.js +0 -1
  74. package/dist/core/safety/ToolExecutionGuard.js.map +1 -1
  75. package/dist/extensions/ExtensionManager.d.ts.map +1 -1
  76. package/dist/extensions/ExtensionManager.js +3 -9
  77. package/dist/extensions/ExtensionManager.js.map +1 -1
  78. package/dist/rag/RetrievalAugmentor.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,639 @@
1
+ /**
2
+ * @fileoverview Microsoft Teams Channel Adapter for AgentOS.
3
+ *
4
+ * Integrates with Microsoft Teams via the Bot Framework SDK
5
+ * (`botbuilder` / `botframework-connector`). The adapter creates
6
+ * a Bot Framework connector client and sends proactive messages
7
+ * and activities to Teams conversations.
8
+ *
9
+ * **Dependencies**: Requires `botbuilder` and `botframework-connector`
10
+ * to be installed.
11
+ *
12
+ * The adapter supports:
13
+ * - Personal (1:1) chat messages
14
+ * - Group chat messages
15
+ * - Channel messages (with threading)
16
+ * - Adaptive Cards (via buttons / rich text)
17
+ * - File attachments
18
+ * - Typing indicators
19
+ * - Reactions
20
+ * - Mentions
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const teams = new TeamsChannelAdapter();
25
+ * await teams.initialize({
26
+ * platform: 'teams',
27
+ * credential: '<app_id>',
28
+ * params: {
29
+ * appPassword: 'your-app-password',
30
+ * tenantId: 'your-tenant-id', // optional, for single-tenant
31
+ * serviceUrl: 'https://smba.trafficmanager.net/teams/',
32
+ * },
33
+ * });
34
+ * ```
35
+ *
36
+ * @module @framers/agentos/channels/adapters/TeamsChannelAdapter
37
+ */
38
+ import { BaseChannelAdapter } from './BaseChannelAdapter.js';
39
+ // ============================================================================
40
+ // TeamsChannelAdapter
41
+ // ============================================================================
42
+ /**
43
+ * Channel adapter for Microsoft Teams via Bot Framework.
44
+ *
45
+ * Uses `botbuilder` and `botframework-connector` via dynamic imports.
46
+ *
47
+ * Capabilities: `text`, `rich_text`, `images`, `documents`, `buttons`,
48
+ * `threads`, `mentions`, `reactions`, `group_chat`, `channels`.
49
+ *
50
+ * Conversation ID format:
51
+ * - Direct: the conversation ID from Teams (opaque string)
52
+ * - Channel: `<channelId>` with optional `replyToMessageId` for threading
53
+ */
54
+ export class TeamsChannelAdapter extends BaseChannelAdapter {
55
+ constructor() {
56
+ super(...arguments);
57
+ this.platform = 'teams';
58
+ this.displayName = 'Microsoft Teams';
59
+ this.capabilities = [
60
+ 'text',
61
+ 'rich_text',
62
+ 'images',
63
+ 'documents',
64
+ 'buttons',
65
+ 'threads',
66
+ 'mentions',
67
+ 'reactions',
68
+ 'group_chat',
69
+ 'channels',
70
+ ];
71
+ /** Service URL for the Teams tenant. */
72
+ this.serviceUrl = 'https://smba.trafficmanager.net/teams/';
73
+ /** Conversation references for proactive messaging, keyed by conversation ID. */
74
+ this.conversationReferences = new Map();
75
+ }
76
+ // ── Abstract hook implementations ──
77
+ async doConnect(auth) {
78
+ const params = auth.params ?? {};
79
+ this.appId = auth.credential;
80
+ if (!this.appId) {
81
+ throw new Error('Teams auth credential (appId) is required.');
82
+ }
83
+ if (!params.appPassword) {
84
+ throw new Error('Teams auth params must include "appPassword".');
85
+ }
86
+ this.serviceUrl = params.serviceUrl ?? this.serviceUrl;
87
+ this.tenantId = params.tenantId;
88
+ // Dynamic imports
89
+ let MicrosoftAppCredentials; // eslint-disable-line @typescript-eslint/no-explicit-any
90
+ let ConnectorClient; // eslint-disable-line @typescript-eslint/no-explicit-any
91
+ let BotFrameworkAdapter; // eslint-disable-line @typescript-eslint/no-explicit-any
92
+ try {
93
+ const connector = await import('botframework-connector');
94
+ MicrosoftAppCredentials =
95
+ connector.MicrosoftAppCredentials ??
96
+ connector.default?.MicrosoftAppCredentials;
97
+ ConnectorClient =
98
+ connector.ConnectorClient ??
99
+ connector.default?.ConnectorClient;
100
+ }
101
+ catch {
102
+ throw new Error('The "botframework-connector" package is required for the Teams adapter. ' +
103
+ 'Install it with: npm install botframework-connector');
104
+ }
105
+ try {
106
+ const botbuilder = await import('botbuilder');
107
+ BotFrameworkAdapter =
108
+ botbuilder.BotFrameworkAdapter ??
109
+ botbuilder.default?.BotFrameworkAdapter;
110
+ }
111
+ catch {
112
+ // botbuilder is optional — needed only for incoming webhook processing
113
+ console.warn('[Teams] "botbuilder" package not found. Incoming message processing ' +
114
+ 'will not be available. Install it with: npm install botbuilder');
115
+ }
116
+ // Create credentials
117
+ this.credentials = new MicrosoftAppCredentials(this.appId, params.appPassword);
118
+ if (this.tenantId) {
119
+ this.credentials.oAuthEndpoint = `https://login.microsoftonline.com/${this.tenantId}`;
120
+ }
121
+ // Create connector client
122
+ this.connectorClient = new ConnectorClient(this.credentials, {
123
+ baseUri: this.serviceUrl,
124
+ });
125
+ // Verify credentials by fetching the token
126
+ try {
127
+ await this.credentials.getToken(true);
128
+ }
129
+ catch (err) {
130
+ const message = err instanceof Error ? err.message : String(err);
131
+ throw new Error(`Teams credential verification failed: ${message}`);
132
+ }
133
+ // Create bot adapter for incoming messages (if botbuilder is available)
134
+ if (BotFrameworkAdapter) {
135
+ this.botAdapter = new BotFrameworkAdapter({
136
+ appId: this.appId,
137
+ appPassword: params.appPassword,
138
+ ...(this.tenantId ? { channelAuthTenant: this.tenantId } : {}),
139
+ });
140
+ // Set up error handler
141
+ this.botAdapter.onTurnError = async (_context, error) => {
142
+ console.error('[Teams] Bot adapter turn error:', error);
143
+ this.emit({
144
+ type: 'error',
145
+ platform: 'teams',
146
+ conversationId: '',
147
+ timestamp: new Date().toISOString(),
148
+ data: { error: error.message },
149
+ });
150
+ };
151
+ }
152
+ this.platformInfo = {
153
+ appId: this.appId,
154
+ serviceUrl: this.serviceUrl,
155
+ tenantId: this.tenantId ?? 'multi-tenant',
156
+ hasBotAdapter: !!this.botAdapter,
157
+ };
158
+ }
159
+ async doSendMessage(conversationId, content) {
160
+ if (!this.connectorClient) {
161
+ throw new Error('[Teams] Connector client is not initialized.');
162
+ }
163
+ // Build the activity
164
+ const activity = this.buildActivity(content);
165
+ // Handle threading
166
+ if (content.replyToMessageId) {
167
+ activity.replyToId = content.replyToMessageId;
168
+ }
169
+ try {
170
+ // Send the activity to the conversation
171
+ const response = await this.connectorClient.conversations.sendToConversation(conversationId, activity);
172
+ return {
173
+ messageId: response?.id ?? `teams-${Date.now()}`,
174
+ timestamp: new Date().toISOString(),
175
+ };
176
+ }
177
+ catch (err) {
178
+ const message = err instanceof Error ? err.message : String(err);
179
+ // Check if we need to use a conversation reference for proactive messaging
180
+ const ref = this.conversationReferences.get(conversationId);
181
+ if (ref && this.botAdapter) {
182
+ return this.sendProactiveMessage(ref, activity);
183
+ }
184
+ throw new Error(`[Teams] Failed to send message: ${message}`);
185
+ }
186
+ }
187
+ async doShutdown() {
188
+ this.connectorClient = undefined;
189
+ this.botAdapter = undefined;
190
+ this.credentials = undefined;
191
+ this.appId = undefined;
192
+ this.conversationReferences.clear();
193
+ }
194
+ // ── IChannelAdapter optional methods ──
195
+ async sendTypingIndicator(conversationId, _isTyping) {
196
+ if (!this.connectorClient)
197
+ return;
198
+ try {
199
+ await this.connectorClient.conversations.sendToConversation(conversationId, { type: 'typing' });
200
+ }
201
+ catch {
202
+ // Non-fatal — typing indicators are best-effort
203
+ }
204
+ }
205
+ async editMessage(conversationId, messageId, content) {
206
+ if (!this.connectorClient) {
207
+ throw new Error('[Teams] Connector client is not initialized.');
208
+ }
209
+ const activity = this.buildActivity(content);
210
+ activity.id = messageId;
211
+ await this.connectorClient.conversations.updateActivity(conversationId, messageId, activity);
212
+ }
213
+ async deleteMessage(conversationId, messageId) {
214
+ if (!this.connectorClient) {
215
+ throw new Error('[Teams] Connector client is not initialized.');
216
+ }
217
+ await this.connectorClient.conversations.deleteActivity(conversationId, messageId);
218
+ }
219
+ // ── Teams-specific public methods ──
220
+ /**
221
+ * Process an incoming Bot Framework request (webhook handler).
222
+ * Call this from your HTTP endpoint that receives Teams webhook POSTs.
223
+ *
224
+ * @param req - HTTP request object.
225
+ * @param res - HTTP response object.
226
+ */
227
+ async processIncomingActivity(req, res) {
228
+ if (!this.botAdapter) {
229
+ throw new Error('[Teams] Bot adapter not available. Install "botbuilder" package.');
230
+ }
231
+ await this.botAdapter.process(req, res, async (context) => {
232
+ await this.handleTurnContext(context);
233
+ });
234
+ }
235
+ /**
236
+ * Store a conversation reference for later proactive messaging.
237
+ * Typically called when first receiving a message from a conversation.
238
+ */
239
+ storeConversationReference(conversationId, reference) {
240
+ this.conversationReferences.set(conversationId, reference);
241
+ }
242
+ /**
243
+ * Create a new conversation with a Teams user (proactive outreach).
244
+ *
245
+ * @param userId - The Teams user ID to start a conversation with.
246
+ * @returns The new conversation ID.
247
+ */
248
+ async createConversation(userId) {
249
+ if (!this.connectorClient || !this.appId) {
250
+ throw new Error('[Teams] Connector client is not initialized.');
251
+ }
252
+ const conversationParams = {
253
+ bot: { id: this.appId },
254
+ members: [{ id: userId }],
255
+ isGroup: false,
256
+ tenantId: this.tenantId,
257
+ };
258
+ const response = await this.connectorClient.conversations.createConversation(conversationParams);
259
+ return response?.id ?? '';
260
+ }
261
+ /**
262
+ * Get the Bot Framework adapter for advanced use cases.
263
+ * Returns undefined if botbuilder is not installed.
264
+ */
265
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
266
+ getBotAdapter() {
267
+ return this.botAdapter;
268
+ }
269
+ // ── Private: Activity building ──
270
+ buildActivity(content) {
271
+ const activity = {
272
+ type: 'message',
273
+ };
274
+ const textParts = [];
275
+ const attachments = [];
276
+ const entities = [];
277
+ for (const block of content.blocks) {
278
+ switch (block.type) {
279
+ case 'text':
280
+ textParts.push(block.text);
281
+ break;
282
+ case 'embed':
283
+ // Rich text / embeds sent as HTML in Teams
284
+ if ('text' in block && typeof block.text === 'string') {
285
+ textParts.push(block.text);
286
+ }
287
+ break;
288
+ case 'image':
289
+ attachments.push({
290
+ contentType: block.mimeType ?? 'image/png',
291
+ contentUrl: block.url,
292
+ name: block.caption ?? 'image',
293
+ });
294
+ if (block.caption) {
295
+ textParts.push(block.caption);
296
+ }
297
+ break;
298
+ case 'document':
299
+ attachments.push({
300
+ contentType: block.mimeType ?? 'application/octet-stream',
301
+ contentUrl: block.url,
302
+ name: block.filename,
303
+ });
304
+ break;
305
+ case 'video':
306
+ attachments.push({
307
+ contentType: block.mimeType ?? 'video/mp4',
308
+ contentUrl: block.url,
309
+ name: block.caption ?? 'video',
310
+ });
311
+ break;
312
+ case 'button_group':
313
+ // Build an Adaptive Card with actions
314
+ attachments.push(this.buildAdaptiveCardWithButtons(block.buttons));
315
+ break;
316
+ case 'embed':
317
+ attachments.push(this.buildAdaptiveCardEmbed(block));
318
+ break;
319
+ case 'poll':
320
+ attachments.push(this.buildAdaptiveCardPoll(block));
321
+ break;
322
+ default:
323
+ // Unsupported block type — skip
324
+ break;
325
+ }
326
+ }
327
+ if (textParts.length > 0) {
328
+ activity.text = textParts.join('\n\n');
329
+ }
330
+ if (attachments.length > 0) {
331
+ activity.attachments = attachments;
332
+ }
333
+ if (entities.length > 0) {
334
+ activity.entities = entities;
335
+ }
336
+ // Platform options pass-through
337
+ if (content.platformOptions) {
338
+ Object.assign(activity, content.platformOptions);
339
+ }
340
+ return activity;
341
+ }
342
+ /**
343
+ * Build an Adaptive Card attachment containing action buttons.
344
+ */
345
+ buildAdaptiveCardWithButtons(buttons) {
346
+ return {
347
+ contentType: 'application/vnd.microsoft.card.adaptive',
348
+ content: {
349
+ type: 'AdaptiveCard',
350
+ version: '1.4',
351
+ body: [],
352
+ actions: buttons.map((btn) => {
353
+ if (btn.action === 'url') {
354
+ return {
355
+ type: 'Action.OpenUrl',
356
+ title: btn.label,
357
+ url: btn.value,
358
+ };
359
+ }
360
+ return {
361
+ type: 'Action.Submit',
362
+ title: btn.label,
363
+ data: { actionId: btn.id, value: btn.value },
364
+ };
365
+ }),
366
+ },
367
+ };
368
+ }
369
+ /**
370
+ * Build an Adaptive Card for embed-style content.
371
+ */
372
+ buildAdaptiveCardEmbed(block) {
373
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
374
+ const body = [];
375
+ body.push({
376
+ type: 'TextBlock',
377
+ text: block.title,
378
+ weight: 'bolder',
379
+ size: 'medium',
380
+ });
381
+ if (block.description) {
382
+ body.push({
383
+ type: 'TextBlock',
384
+ text: block.description,
385
+ wrap: true,
386
+ });
387
+ }
388
+ if (block.fields) {
389
+ const columns = block.fields.map((f) => ({
390
+ type: 'Column',
391
+ width: f.inline ? 'auto' : 'stretch',
392
+ items: [
393
+ { type: 'TextBlock', text: f.name, weight: 'bolder', size: 'small' },
394
+ { type: 'TextBlock', text: f.value, wrap: true },
395
+ ],
396
+ }));
397
+ body.push({
398
+ type: 'ColumnSet',
399
+ columns,
400
+ });
401
+ }
402
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
403
+ const actions = [];
404
+ if (block.url) {
405
+ actions.push({
406
+ type: 'Action.OpenUrl',
407
+ title: 'Open Link',
408
+ url: block.url,
409
+ });
410
+ }
411
+ return {
412
+ contentType: 'application/vnd.microsoft.card.adaptive',
413
+ content: {
414
+ type: 'AdaptiveCard',
415
+ version: '1.4',
416
+ body,
417
+ ...(actions.length > 0 ? { actions } : {}),
418
+ },
419
+ };
420
+ }
421
+ /**
422
+ * Build an Adaptive Card for poll content.
423
+ */
424
+ buildAdaptiveCardPoll(block) {
425
+ return {
426
+ contentType: 'application/vnd.microsoft.card.adaptive',
427
+ content: {
428
+ type: 'AdaptiveCard',
429
+ version: '1.4',
430
+ body: [
431
+ {
432
+ type: 'TextBlock',
433
+ text: block.question,
434
+ weight: 'bolder',
435
+ size: 'medium',
436
+ wrap: true,
437
+ },
438
+ {
439
+ type: 'Input.ChoiceSet',
440
+ id: 'pollChoice',
441
+ style: 'expanded',
442
+ choices: block.options.map((opt, idx) => ({
443
+ title: opt,
444
+ value: String(idx),
445
+ })),
446
+ },
447
+ ],
448
+ actions: [
449
+ {
450
+ type: 'Action.Submit',
451
+ title: 'Vote',
452
+ data: { action: 'pollVote' },
453
+ },
454
+ ],
455
+ },
456
+ };
457
+ }
458
+ // ── Private: proactive messaging ──
459
+ async sendProactiveMessage(reference, activity) {
460
+ if (!this.botAdapter) {
461
+ throw new Error('[Teams] Bot adapter required for proactive messaging.');
462
+ }
463
+ return new Promise((resolve, reject) => {
464
+ this.botAdapter.continueConversation(reference, async (context) => {
465
+ try {
466
+ const response = await context.sendActivity(activity);
467
+ resolve({
468
+ messageId: response?.id ?? `teams-${Date.now()}`,
469
+ timestamp: new Date().toISOString(),
470
+ });
471
+ }
472
+ catch (err) {
473
+ reject(err);
474
+ }
475
+ });
476
+ });
477
+ }
478
+ // ── Private: incoming activity processing ──
479
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
480
+ async handleTurnContext(context) {
481
+ const activity = context.activity;
482
+ if (!activity)
483
+ return;
484
+ // Store conversation reference for proactive messaging
485
+ const ref = {
486
+ activityId: activity.id,
487
+ user: activity.from,
488
+ bot: activity.recipient,
489
+ conversation: activity.conversation,
490
+ channelId: activity.channelId,
491
+ serviceUrl: activity.serviceUrl,
492
+ };
493
+ this.conversationReferences.set(activity.conversation?.id, ref);
494
+ switch (activity.type) {
495
+ case 'message':
496
+ this.handleIncomingMessage(activity);
497
+ break;
498
+ case 'messageReaction':
499
+ this.handleReaction(activity);
500
+ break;
501
+ case 'conversationUpdate':
502
+ this.handleConversationUpdate(activity);
503
+ break;
504
+ default:
505
+ break;
506
+ }
507
+ }
508
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
509
+ handleIncomingMessage(activity) {
510
+ const conversationId = activity.conversation?.id ?? 'unknown';
511
+ const isGroup = activity.conversation?.conversationType === 'groupChat' ||
512
+ activity.conversation?.conversationType === 'channel';
513
+ const contentBlocks = [];
514
+ if (activity.text) {
515
+ contentBlocks.push({ type: 'text', text: activity.text });
516
+ }
517
+ // Process attachments
518
+ if (activity.attachments) {
519
+ for (const att of activity.attachments) {
520
+ if (att.contentType?.startsWith('image/')) {
521
+ contentBlocks.push({
522
+ type: 'image',
523
+ url: att.contentUrl ?? '',
524
+ mimeType: att.contentType,
525
+ caption: att.name,
526
+ });
527
+ }
528
+ else if (att.contentUrl) {
529
+ contentBlocks.push({
530
+ type: 'document',
531
+ url: att.contentUrl,
532
+ filename: att.name ?? 'attachment',
533
+ mimeType: att.contentType,
534
+ });
535
+ }
536
+ }
537
+ }
538
+ const message = {
539
+ messageId: activity.id ?? `teams-${Date.now()}`,
540
+ platform: 'teams',
541
+ conversationId,
542
+ conversationType: isGroup ? 'group' : 'direct',
543
+ sender: {
544
+ id: activity.from?.id ?? 'unknown',
545
+ displayName: activity.from?.name,
546
+ username: activity.from?.aadObjectId,
547
+ },
548
+ content: contentBlocks.length > 0 ? contentBlocks : [{ type: 'text', text: '' }],
549
+ text: activity.text ?? '',
550
+ timestamp: activity.timestamp ?? new Date().toISOString(),
551
+ replyToMessageId: activity.replyToId,
552
+ rawEvent: activity,
553
+ };
554
+ this.emit({
555
+ type: 'message',
556
+ platform: 'teams',
557
+ conversationId,
558
+ timestamp: message.timestamp,
559
+ data: message,
560
+ });
561
+ }
562
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
563
+ handleReaction(activity) {
564
+ const conversationId = activity.conversation?.id ?? 'unknown';
565
+ if (activity.reactionsAdded) {
566
+ for (const reaction of activity.reactionsAdded) {
567
+ this.emit({
568
+ type: 'reaction_added',
569
+ platform: 'teams',
570
+ conversationId,
571
+ timestamp: new Date().toISOString(),
572
+ data: {
573
+ emoji: reaction.type,
574
+ messageId: activity.replyToId,
575
+ sender: {
576
+ id: activity.from?.id ?? 'unknown',
577
+ displayName: activity.from?.name,
578
+ },
579
+ },
580
+ });
581
+ }
582
+ }
583
+ if (activity.reactionsRemoved) {
584
+ for (const reaction of activity.reactionsRemoved) {
585
+ this.emit({
586
+ type: 'reaction_removed',
587
+ platform: 'teams',
588
+ conversationId,
589
+ timestamp: new Date().toISOString(),
590
+ data: {
591
+ emoji: reaction.type,
592
+ messageId: activity.replyToId,
593
+ sender: {
594
+ id: activity.from?.id ?? 'unknown',
595
+ displayName: activity.from?.name,
596
+ },
597
+ },
598
+ });
599
+ }
600
+ }
601
+ }
602
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
603
+ handleConversationUpdate(activity) {
604
+ const conversationId = activity.conversation?.id ?? 'unknown';
605
+ if (activity.membersAdded) {
606
+ for (const member of activity.membersAdded) {
607
+ this.emit({
608
+ type: 'member_joined',
609
+ platform: 'teams',
610
+ conversationId,
611
+ timestamp: new Date().toISOString(),
612
+ data: {
613
+ user: {
614
+ id: member.id,
615
+ displayName: member.name,
616
+ },
617
+ },
618
+ });
619
+ }
620
+ }
621
+ if (activity.membersRemoved) {
622
+ for (const member of activity.membersRemoved) {
623
+ this.emit({
624
+ type: 'member_left',
625
+ platform: 'teams',
626
+ conversationId,
627
+ timestamp: new Date().toISOString(),
628
+ data: {
629
+ user: {
630
+ id: member.id,
631
+ displayName: member.name,
632
+ },
633
+ },
634
+ });
635
+ }
636
+ }
637
+ }
638
+ }
639
+ //# sourceMappingURL=TeamsChannelAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamsChannelAdapter.js","sourceRoot":"","sources":["../../../src/channels/adapters/TeamsChannelAdapter.ts"],"names":[],"mappings":"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"}