UNPKG

@microsoft/agents-hosting-extensions-teams

Version:

Microsoft 365 Agents SDK for JavaScript. Teams extensions

280 lines 14.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TeamsAgentExtension = void 0; const meeting_1 = require("./meeting/meeting"); const agents_activity_1 = require("@microsoft/agents-activity"); const agents_hosting_1 = require("@microsoft/agents-hosting"); const teamsChannelDataParser_1 = require("./activity-extensions/teamsChannelDataParser"); const messageExtension_1 = require("./messageExtension/messageExtension"); const taskModule_1 = require("./taskModule/taskModule"); /** * Microsoft Teams-specific extension for agent applications that provides event handlers and functionality * for Teams-specific activities such as message operations, member management, channel operations, and team lifecycle events. * @template TState The type of turn state, extending TurnState */ class TeamsAgentExtension extends agents_hosting_1.AgentExtension { /** * Creates a new instance of TeamsAgentExtension. * @param app The agent application instance to extend with Teams functionality */ constructor(app) { super('msteams'); this.app = app; /** * Registers a handler for message edit events in Teams. * @param handler The route handler to execute when a message is edited * @returns This TeamsAgentExtension instance for method chaining */ this.onMessageEdit = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(!!(context.activity.type === agents_activity_1.ActivityTypes.MessageUpdate && (channelData === null || channelData === void 0 ? void 0 : channelData.eventType) === 'editMessage')); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for message delete events in Teams. * @param handler The route handler to execute when a message is deleted * @returns This TeamsAgentExtension instance for method chaining */ this.onMessageDelete = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.MessageDelete && channelData && channelData.eventType === 'softDeleteMessage'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for message undelete events in Teams. * @param handler The route handler to execute when a message is undeleted * @returns This TeamsAgentExtension instance for method chaining */ this.onMessageUndelete = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.MessageUpdate && channelData && channelData.eventType === 'undeleteMessage'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when members are added to a Teams conversation. * @param handler The route handler to execute when members are added * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsMembersAdded = (handler) => { const routeSel = (context) => { return Promise.resolve(!!(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && context.activity.membersAdded && context.activity.membersAdded.length > 0)); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when members are removed from a Teams conversation. * @param handler The route handler to execute when members are removed * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsMembersRemoved = (handler) => { const routeSel = (context) => { return Promise.resolve(!!(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && context.activity.membersRemoved && context.activity.membersRemoved.length > 0)); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams channel is created. * @param handler The route handler to execute when a channel is created * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsChannelCreated = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'channelCreated'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams channel is deleted. * @param handler The route handler to execute when a channel is deleted * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsChannelDeleted = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'channelDeleted'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams channel is renamed. * @param handler The route handler to execute when a channel is renamed * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsChannelRenamed = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'channelRenamed'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams channel is restored. * @param handler The route handler to execute when a channel is restored * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsChannelRestored = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'channelRestored'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams team is renamed. * @param handler The route handler to execute when a team is renamed * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsTeamRenamed = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'teamRenamed'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams team is archived. * @param handler The route handler to execute when a team is archived * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsTeamArchived = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'teamArchived'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams team is unarchived. * @param handler The route handler to execute when a team is unarchived * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsTeamUnarchived = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'teamUnarchived'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams team is deleted (soft delete). * @param handler The route handler to execute when a team is deleted * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsTeamDeleted = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'teamDeleted'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams team is hard deleted (permanently deleted). * @param handler The route handler to execute when a team is hard deleted * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsTeamHardDeleted = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'teamHardDeleted'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; /** * Registers a handler for when a Teams team is restored. * @param handler The route handler to execute when a team is restored * @returns This TeamsAgentExtension instance for method chaining */ this.onTeamsTeamRestored = (handler) => { const routeSel = (context) => { const channelData = (0, teamsChannelDataParser_1.parseTeamsChannelData)(context.activity.channelData); return Promise.resolve(context.activity.type === agents_activity_1.ActivityTypes.ConversationUpdate && context.activity.channelId === 'msteams' && channelData && channelData.eventType === 'teamRestored'); }; this.addRoute(this._app, routeSel, handler, false); return this; }; this._app = app; this._meeting = new meeting_1.Meeting(app); this._messageExtension = new messageExtension_1.MessageExtension(app); this._taskModule = new taskModule_1.TaskModule(app); } /** * Gets the meeting functionality for handling Teams meeting-related activities. * @returns The Meeting instance for this extension */ get meeting() { return this._meeting; } /** * Gets the message extension functionality for handling Teams message extension activities. * @returns The MessageExtension instance for this extension */ get messageExtension() { return this._messageExtension; } /** * Gets the task module functionality for handling Teams task module activities. * @returns The TaskModule instance for this extension */ get taskModule() { return this._taskModule; } } exports.TeamsAgentExtension = TeamsAgentExtension; //# sourceMappingURL=teamsAgentExtension.js.map