@microsoft/agents-hosting-extensions-teams
Version:
Microsoft 365 Agents SDK for JavaScript. Teams extensions
280 lines • 14.6 kB
JavaScript
"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