UNPKG

@microsoft/agents-hosting-extensions-teams

Version:

Microsoft 365 Agents SDK for JavaScript. Teams extensions

911 lines 40 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.TeamsActivityHandler = void 0; /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ const z = __importStar(require("zod")); const agents_hosting_1 = require("@microsoft/agents-hosting"); const messageExtension_1 = require("../messageExtension"); const activity_extensions_1 = require("../activity-extensions"); const readReceipInfo_1 = require("./readReceipInfo"); const TeamsMeetingStartT = z .object({ Id: z.string(), JoinUrl: z.string(), MeetingType: z.string(), Title: z.string(), StartTime: z.string() }); const TeamsMeetingEndT = z .object({ Id: z.string(), JoinUrl: z.string(), MeetingType: z.string(), Title: z.string(), EndTime: z.string() }); /** * A handler for processing Microsoft Teams-specific activities. * Extends the ActivityHandler class to provide additional Teams-specific functionality. * This class includes methods for handling various Teams events, such as message updates, channel events, and meeting events. */ class TeamsActivityHandler extends agents_hosting_1.ActivityHandler { /** * Handles invoke activities. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<InvokeResponse>} The invoke response. */ async onInvokeActivity(context) { let runEvents = true; try { if (!context.activity.name && context.activity.channelId === 'msteams') { return await this.handleTeamsCardActionInvoke(context); } else { switch (context.activity.name) { case 'config/fetch': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsConfigFetch(context, context.activity.value)); case 'config/submit': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsConfigSubmit(context, context.activity.value)); case 'fileConsent/invoke': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsFileConsent(context, context.activity.value)); case 'actionableMessage/executeAction': // TODO: Uncomment when O365ConnectorCardActionQuery is available // await this.handleTeamsO365ConnectorCardAction(context, context.activity.value) // as O365ConnectorCardActionQuery return agents_hosting_1.ActivityHandler.createInvokeResponse(); case 'composeExtension/queryLink': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsAppBasedLinkQuery(context, context.activity.value)); case 'composeExtension/anonymousQueryLink': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsAnonymousAppBasedLinkQuery(context, context.activity.value)); case 'composeExtension/query': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsMessagingExtensionQuery(context, (0, messageExtension_1.parseValueMessagingExtensionQuery)(context.activity.value))); case 'composeExtension/selectItem': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsMessagingExtensionSelectItem(context, context.activity.value)); case 'composeExtension/submitAction': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsMessagingExtensionSubmitActionDispatch(context, context.activity.value)); case 'composeExtension/fetchTask': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsMessagingExtensionFetchTask(context, context.activity.value)); case 'composeExtension/querySettingUrl': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsMessagingExtensionConfigurationQuerySettingUrl(context, context.activity.value)); case 'composeExtension/setting': await this.handleTeamsMessagingExtensionConfigurationSetting(context, context.activity.value); return agents_hosting_1.ActivityHandler.createInvokeResponse(); case 'composeExtension/onCardButtonClicked': await this.handleTeamsMessagingExtensionCardButtonClicked(context, context.activity.value); return agents_hosting_1.ActivityHandler.createInvokeResponse(); case 'task/fetch': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsTaskModuleFetch(context, context.activity.value)); case 'task/submit': return agents_hosting_1.ActivityHandler.createInvokeResponse(await this.handleTeamsTaskModuleSubmit(context, context.activity.value)); case 'tab/fetch': return agents_hosting_1.ActivityHandler.createInvokeResponse( // TODO: Uncomment when TabRequest is available // await this.handleTeamsTabFetch(context, context.activity.value) // as TabRequest ); case 'tab/submit': return agents_hosting_1.ActivityHandler.createInvokeResponse( // TODO: Uncomment when TabSubmit is available // await this.handleTeamsTabSubmit(context, context.activity.value) // as TabSubmit ); default: runEvents = false; return await super.onInvokeActivity(context); } } } catch (err) { if (err.message === 'NotImplemented') { return { status: 501 }; } else if (err.message === 'BadRequest') { return { status: 400 }; } throw err; } finally { if (runEvents) { this.defaultNextEvent(context)(); } } } /** * Handles card action invoke. * @param {TurnContext} _context - The context object for the turn. * @returns {Promise<InvokeResponse>} The invoke response. */ async handleTeamsCardActionInvoke(_context) { throw new Error('NotImplemented'); } /** * Handles config fetch. * @param {TurnContext} _context - The context object for the turn. * @param {any} _configData - The config data. * @returns {Promise<ConfigResponse>} The config response. */ async handleTeamsConfigFetch(_context, _configData) { throw new Error('NotImplemented'); } /** * Handles config submit. * @param {TurnContext} _context - The context object for the turn. * @param {any} _configData - The config data. * @returns {Promise<ConfigResponse>} The config response. */ async handleTeamsConfigSubmit(_context, _configData) { throw new Error('NotImplemented'); } /** * Handles file consent. * @param {TurnContext} context - The context object for the turn. * @param {FileConsentCardResponse} fileConsentCardResponse - The file consent card response. * @returns {Promise<void>} */ async handleTeamsFileConsent(context, fileConsentCardResponse) { switch (fileConsentCardResponse.action) { case 'accept': return await this.handleTeamsFileConsentAccept(context, fileConsentCardResponse); case 'decline': return await this.handleTeamsFileConsentDecline(context, fileConsentCardResponse); default: throw new Error('BadRequest'); } } /** * Handles file consent accept. * @param {TurnContext} _context - The context object for the turn. * @param {FileConsentCardResponse} _fileConsentCardResponse - The file consent card response. * @returns {Promise<void>} */ async handleTeamsFileConsentAccept(_context, _fileConsentCardResponse) { throw new Error('NotImplemented'); } /** * Handles file consent decline. * @param {TurnContext} _context - The context object for the turn. * @param {FileConsentCardResponse} _fileConsentCardResponse - The file consent card response. * @returns {Promise<void>} */ async handleTeamsFileConsentDecline(_context, _fileConsentCardResponse) { throw new Error('NotImplemented'); } // TODO: Uncomment when O365ConnectorCardActionQuery is available // /** // * Handles O365 connector card action. // * @param {TurnContext} _context - The context object for the turn. // * @param {O365ConnectorCardActionQuery} _query - The O365 connector card action query. // * @returns {Promise<void>} // */ // protected async handleTeamsO365ConnectorCardAction ( // _context: TurnContext, // _query: O365ConnectorCardActionQuery // ): Promise<void> { // throw new Error('NotImplemented') // } // TODO: Uncomment when SigninStateVerificationQuery is available // /** // * Handles sign-in verify state. // * @param {TurnContext} _context - The context object for the turn. // * @param {SigninStateVerificationQuery} _query - The sign-in state verification query. // * @returns {Promise<void>} // */ // protected async handleTeamsSigninVerifyState ( // _context: TurnContext, // _query: SigninStateVerificationQuery // ): Promise<void> { // throw new Error('NotImplemented') // } // TODO: Uncomment when SigninStateVerificationQuery is available // /** // * Handles sign-in token exchange. // * @param {TurnContext} _context - The context object for the turn. // * @param {SigninStateVerificationQuery} _query - The sign-in state verification query. // * @returns {Promise<void>} // */ // protected async handleTeamsSigninTokenExchange ( // _context: TurnContext, // _query: SigninStateVerificationQuery // ): Promise<void> { // throw new Error('NotImplemented') // } /** * Handles messaging extension card button clicked. * @param {TurnContext} _context - The context object for the turn. * @param {any} _cardData - The card data. * @returns {Promise<void>} */ async handleTeamsMessagingExtensionCardButtonClicked(_context, _cardData) { throw new Error('NotImplemented'); } /** * Handles task module fetch. * @param {TurnContext} _context - The context object for the turn. * @param {TaskModuleRequest} _taskModuleRequest - The task module request. * @returns {Promise<TaskModuleResponse>} The task module response. */ async handleTeamsTaskModuleFetch(_context, _taskModuleRequest) { throw new Error('NotImplemented'); } /** * Handles task module submit. * @param {TurnContext} _context - The context object for the turn. * @param {TaskModuleRequest} _taskModuleRequest - The task module request. * @returns {Promise<TaskModuleResponse>} The task module response. */ async handleTeamsTaskModuleSubmit(_context, _taskModuleRequest) { throw new Error('NotImplemented'); } // TODO: Uncomment when TabRequest is available // /** // * Handles tab fetch. // * @param {TurnContext} _context - The context object for the turn. // * @param {TabRequest} _tabRequest - The tab request. // * @returns {Promise<TabResponse>} The tab response. // */ // protected async handleTeamsTabFetch (_context: TurnContext, _tabRequest: TabRequest): Promise<TabResponse> { // throw new Error('NotImplemented') // } // TODO: Uncomment when TabSubmit is available // /** // * Handles tab submit. // * @param {TurnContext} _context - The context object for the turn. // * @param {TabSubmit} _tabSubmit - The tab submit. // * @returns {Promise<TabResponse>} The tab response. // */ // protected async handleTeamsTabSubmit (_context: TurnContext, _tabSubmit: TabSubmit): Promise<TabResponse> { // throw new Error('NotImplemented') // } /** * Handles app-based link query. * @param {TurnContext} _context - The context object for the turn. * @param {AppBasedLinkQuery} _query - The app-based link query. * @returns {Promise<MessagingExtensionResponse>} The messaging extension response. */ async handleTeamsAppBasedLinkQuery(_context, _query) { throw new Error('NotImplemented'); } /** * Handles anonymous app-based link query. * @param {TurnContext} _context - The context object for the turn. * @param {AppBasedLinkQuery} _query - The app-based link query. * @returns {Promise<MessagingExtensionResponse>} The messaging extension response. */ async handleTeamsAnonymousAppBasedLinkQuery(_context, _query) { throw new Error('NotImplemented'); } /** * Handles messaging extension query. * @param {TurnContext} _context - The context object for the turn. * @param {MessagingExtensionQuery} _query - The messaging extension query. * @returns {Promise<MessagingExtensionResponse>} The messaging extension response. */ async handleTeamsMessagingExtensionQuery(_context, _query) { throw new Error('NotImplemented'); } /** * Handles messaging extension select item. * @param {TurnContext} _context - The context object for the turn. * @param {any} _query - The query. * @returns {Promise<MessagingExtensionResponse>} The messaging extension response. */ async handleTeamsMessagingExtensionSelectItem(_context, _query) { throw new Error('NotImplemented'); } /** * Handles messaging extension submit action dispatch. * @param {TurnContext} context - The context object for the turn. * @param {MessagingExtensionAction} action - The messaging extension action. * @returns {Promise<MessagingExtensionActionResponse>} The messaging extension action response. */ async handleTeamsMessagingExtensionSubmitActionDispatch(context, action) { if (action.messagePreviewAction) { switch (action.messagePreviewAction) { case 'edit': return await this.handleTeamsMessagingExtensionMessagePreviewEdit(context, action); case 'send': return await this.handleTeamsMessagingExtensionMessagePreviewSend(context, action); default: throw new Error('BadRequest'); } } else { return await this.handleTeamsMessagingExtensionSubmitAction(context, action); } } /** * Handles messaging extension submit action. * @param {TurnContext} _context - The context object for the turn. * @param {MessagingExtensionAction} _action - The messaging extension action. * @returns {Promise<MessagingExtensionActionResponse>} The messaging extension action response. */ async handleTeamsMessagingExtensionSubmitAction(_context, _action) { throw new Error('NotImplemented'); } /** * Handles messaging extension message preview edit. * @param {TurnContext} _context - The context object for the turn. * @param {MessagingExtensionAction} _action - The messaging extension action. * @returns {Promise<MessagingExtensionActionResponse>} The messaging extension action response. */ async handleTeamsMessagingExtensionMessagePreviewEdit(_context, _action) { throw new Error('NotImplemented'); } /** * Handles messaging extension message preview send. * @param {TurnContext} _context - The context object for the turn. * @param {MessagingExtensionAction} _action - The messaging extension action. * @returns {Promise<MessagingExtensionActionResponse>} The messaging extension action response. */ async handleTeamsMessagingExtensionMessagePreviewSend(_context, _action) { throw new Error('NotImplemented'); } /** * Handles messaging extension fetch task. * @param {TurnContext} _context - The context object for the turn. * @param {MessagingExtensionAction} _action - The messaging extension action. * @returns {Promise<MessagingExtensionActionResponse>} The messaging extension action response. */ async handleTeamsMessagingExtensionFetchTask(_context, _action) { throw new Error('NotImplemented'); } /** * Handles messaging extension configuration query setting URL. * @param {TurnContext} _context - The context object for the turn. * @param {MessagingExtensionQuery} _query - The messaging extension query. * @returns {Promise<MessagingExtensionResponse>} The messaging extension response. */ async handleTeamsMessagingExtensionConfigurationQuerySettingUrl(_context, _query) { throw new Error('NotImplemented'); } /** * Handles messaging extension configuration setting. * @param {TurnContext} _context - The context object for the turn. * @param {any} _settings - The settings. * @returns {Promise<void>} */ async handleTeamsMessagingExtensionConfigurationSetting(_context, _settings) { throw new Error('NotImplemented'); } /** * Dispatches conversation update activity. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async dispatchConversationUpdateActivity(context) { if (context.activity.channelId === 'msteams') { const channelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); if ((context.activity.membersAdded != null) && context.activity.membersAdded.length > 0) { return await this.onTeamsMembersAdded(context); } if ((context.activity.membersRemoved != null) && context.activity.membersRemoved.length > 0) { return await this.onTeamsMembersRemoved(context); } if (!channelData || !channelData.eventType) { return await super.dispatchConversationUpdateActivity(context); } switch (channelData.eventType) { case 'channelCreated': return await this.onTeamsChannelCreated(context); case 'channelDeleted': return await this.onTeamsChannelDeleted(context); case 'channelRenamed': return await this.onTeamsChannelRenamed(context); case 'teamArchived': return await this.onTeamsTeamArchived(context); case 'teamDeleted': return await this.onTeamsTeamDeleted(context); case 'teamHardDeleted': return await this.onTeamsTeamHardDeleted(context); case 'channelRestored': return await this.onTeamsChannelRestored(context); case 'teamRenamed': return await this.onTeamsTeamRenamed(context); case 'teamRestored': return await this.onTeamsTeamRestored(context); case 'teamUnarchived': return await this.onTeamsTeamUnarchived(context); default: return await super.dispatchConversationUpdateActivity(context); } } else { return await super.dispatchConversationUpdateActivity(context); } } /** * Dispatches message update activity. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async dispatchMessageUpdateActivity(context) { if (context.activity.channelId === 'msteams') { const channelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); switch (channelData.eventType) { case 'undeleteMessage': return await this.onTeamsMessageUndelete(context); case 'editMessage': return await this.onTeamsMessageEdit(context); default: return await super.dispatchMessageUpdateActivity(context); } } else { return await super.dispatchMessageUpdateActivity(context); } } /** * Dispatches message delete activity. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async dispatchMessageDeleteActivity(context) { if (context.activity.channelId === 'msteams') { const channelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); switch (channelData.eventType) { case 'softDeleteMessage': return await this.onTeamsMessageSoftDelete(context); default: return await super.dispatchMessageDeleteActivity(context); } } else { return await super.dispatchMessageDeleteActivity(context); } } /** * Handles Teams message undelete. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMessageUndelete(context) { await this.handle(context, 'TeamsMessageUndelete', this.defaultNextEvent(context)); } /** * Handles Teams message edit. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMessageEdit(context) { await this.handle(context, 'TeamsMessageEdit', this.defaultNextEvent(context)); } /** * Handles Teams message soft delete. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMessageSoftDelete(context) { await this.handle(context, 'onTeamsMessageSoftDelete', this.defaultNextEvent(context)); } /** * Handles Teams members added. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMembersAdded(context) { await this.handle(context, 'TeamsMembersAdded', this.defaultNextEvent(context)); } /** * Handles Teams members removed. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMembersRemoved(context) { if ('TeamsMembersRemoved' in this.handlers && this.handlers.TeamsMembersRemoved.length > 0) { await this.handle(context, 'TeamsMembersRemoved', this.defaultNextEvent(context)); } else { await this.handle(context, 'MembersRemoved', this.defaultNextEvent(context)); } } /** * Handles Teams channel created. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsChannelCreated(context) { await this.handle(context, 'TeamsChannelCreated', this.defaultNextEvent(context)); } /** * Handles Teams channel deleted. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsChannelDeleted(context) { await this.handle(context, 'TeamsChannelDeleted', this.defaultNextEvent(context)); } /** * Handles Teams channel renamed. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsChannelRenamed(context) { await this.handle(context, 'TeamsChannelRenamed', this.defaultNextEvent(context)); } /** * Handles Teams team archived. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsTeamArchived(context) { await this.handle(context, 'TeamsTeamArchived', this.defaultNextEvent(context)); } /** * Handles Teams team deleted. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsTeamDeleted(context) { await this.handle(context, 'TeamsTeamDeleted', this.defaultNextEvent(context)); } /** * Handles Teams team hard deleted. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsTeamHardDeleted(context) { await this.handle(context, 'TeamsTeamHardDeleted', this.defaultNextEvent(context)); } /** * Handles Teams channel restored. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsChannelRestored(context) { await this.handle(context, 'TeamsChannelRestored', this.defaultNextEvent(context)); } /** * Handles Teams team renamed. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsTeamRenamed(context) { await this.handle(context, 'TeamsTeamRenamed', this.defaultNextEvent(context)); } /** * Handles Teams team restored. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsTeamRestored(context) { await this.handle(context, 'TeamsTeamRestored', this.defaultNextEvent(context)); } /** * Handles Teams team unarchived. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsTeamUnarchived(context) { await this.handle(context, 'TeamsTeamUnarchived', this.defaultNextEvent(context)); } /** * Registers a handler for Teams message undelete event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMessageUndeleteEvent(handler) { return this.on('TeamsMessageUndelete', async (context, next) => { await handler(context, next); }); } /** * Registers a handler for Teams message edit event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMessageEditEvent(handler) { return this.on('TeamsMessageEdit', async (context, next) => { await handler(context, next); }); } /** * Registers a handler for Teams message soft delete event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMessageSoftDeleteEvent(handler) { return this.on('onTeamsMessageSoftDelete', async (context, next) => { await handler(context, next); }); } /** * Registers a handler for Teams members added event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMembersAddedEvent(handler) { return this.on('TeamsMembersAdded', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(context.activity.membersAdded || [], teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams members removed event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMembersRemovedEvent(handler) { return this.on('TeamsMembersRemoved', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(context.activity.membersRemoved || [], teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams channel created event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsChannelCreatedEvent(handler) { return this.on('TeamsChannelCreated', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.channel, teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams channel deleted event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsChannelDeletedEvent(handler) { return this.on('TeamsChannelDeleted', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.channel, teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams channel renamed event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsChannelRenamedEvent(handler) { return this.on('TeamsChannelRenamed', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.channel, teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams team archived event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsTeamArchivedEvent(handler) { return this.on('TeamsTeamArchived', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams team deleted event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsTeamDeletedEvent(handler) { return this.on('TeamsTeamDeleted', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams team hard deleted event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsTeamHardDeletedEvent(handler) { return this.on('TeamsTeamHardDeleted', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams channel restored event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsChannelRestoredEvent(handler) { return this.on('TeamsChannelRestored', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.channel, teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams team renamed event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsTeamRenamedEvent(handler) { return this.on('TeamsTeamRenamed', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams team restored event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsTeamRestoredEvent(handler) { return this.on('TeamsTeamRestored', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.team, context, next); }); } /** * Registers a handler for Teams team unarchived event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsTeamUnarchivedEvent(handler) { return this.on('TeamsTeamUnarchived', async (context, next) => { const teamsChannelData = (0, activity_extensions_1.parseTeamsChannelData)(context.activity.channelData); await handler(teamsChannelData.team, context, next); }); } /** * Dispatches event activity. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async dispatchEventActivity(context) { if (context.activity.channelId === 'msteams') { switch (context.activity.name) { case 'application/vnd.microsoft.readReceipt': return await this.onTeamsReadReceipt(context); case 'application/vnd.microsoft.meetingStart': return await this.onTeamsMeetingStart(context); case 'application/vnd.microsoft.meetingEnd': return await this.onTeamsMeetingEnd(context); case 'application/vnd.microsoft.meetingParticipantJoin': return await this.onTeamsMeetingParticipantsJoin(context); case 'application/vnd.microsoft.meetingParticipantLeave': return await this.onTeamsMeetingParticipantsLeave(context); } } return await super.dispatchEventActivity(context); } /** * Handles Teams meeting start. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMeetingStart(context) { await this.handle(context, 'TeamsMeetingStart', this.defaultNextEvent(context)); } /** * Handles Teams meeting end. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMeetingEnd(context) { await this.handle(context, 'TeamsMeetingEnd', this.defaultNextEvent(context)); } /** * Handles Teams read receipt. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsReadReceipt(context) { await this.handle(context, 'TeamsReadReceipt', this.defaultNextEvent(context)); } /** * Handles Teams meeting participants join. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMeetingParticipantsJoin(context) { await this.handle(context, 'TeamsMeetingParticipantsJoin', this.defaultNextEvent(context)); } /** * Handles Teams meeting participants leave. * @param {TurnContext} context - The context object for the turn. * @returns {Promise<void>} */ async onTeamsMeetingParticipantsLeave(context) { await this.handle(context, 'TeamsMeetingParticipantsLeave', this.defaultNextEvent(context)); } /** * Registers a handler for Teams meeting start event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMeetingStartEvent(handler) { return this.on('TeamsMeetingStart', async (context, next) => { const meeting = TeamsMeetingStartT.parse(context.activity.value); await handler({ id: meeting.Id, joinUrl: meeting.JoinUrl, meetingType: meeting.MeetingType, startTime: new Date(meeting.StartTime), title: meeting.Title }, context, next); }); } /** * Registers a handler for Teams meeting end event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMeetingEndEvent(handler) { return this.on('TeamsMeetingEnd', async (context, next) => { const meeting = TeamsMeetingEndT.parse(context.activity.value); await handler({ id: meeting.Id, joinUrl: meeting.JoinUrl, meetingType: meeting.MeetingType, endTime: new Date(meeting.EndTime), title: meeting.Title }, context, next); }); } /** * Registers a handler for Teams read receipt event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsReadReceiptEvent(handler) { return this.on('TeamsReadReceipt', async (context, next) => { const receiptInfo = context.activity.value; await handler(new readReceipInfo_1.ReadReceiptInfo(receiptInfo.lastReadMessageId), context, next); }); } /** * Registers a handler for Teams meeting participants join event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMeetingParticipantsJoinEvent(handler) { return this.on('TeamsMeetingParticipantsJoin', async (context, next) => { const meeting = TeamsMeetingStartT.parse(context.activity.value); await handler({ members: meeting.members }, context, next); }); } /** * Registers a handler for Teams meeting participants leave event. * @param {function} handler - The handler function. * @returns {this} */ onTeamsMeetingParticipantsLeaveEvent(handler) { return this.on('TeamsMeetingParticipantsLeave', async (context, next) => { const meeting = TeamsMeetingEndT.parse(context.activity.value); await handler({ members: meeting.members }, context, next); }); } } exports.TeamsActivityHandler = TeamsActivityHandler; //# sourceMappingURL=teamsActivityHandler.js.map