diff --git a/examples/message-extensions/src/card.ts b/examples/message-extensions/src/card.ts index 7f404c196..dd13e2276 100644 --- a/examples/message-extensions/src/card.ts +++ b/examples/message-extensions/src/card.ts @@ -1,4 +1,4 @@ -import { Account, Message, ThumbnailCard } from '@microsoft/teams.api'; +import { Account, Message, TeamsChannelAccount, ThumbnailCard } from '@microsoft/teams.api'; import { ActionSet, AdaptiveCard, @@ -108,7 +108,7 @@ export function createMessageDetailsCard(messagePayload: Message) { return new AdaptiveCard(...cardElements); } -export function createConversationMembersCard(members: Account[]) { +export function createConversationMembersCard(members: (Account | TeamsChannelAccount)[]) { const membersList = members.map((member) => member.name).join(', '); return new AdaptiveCard( @@ -157,7 +157,7 @@ export async function createDummyCards(searchQuery: string) { // When a user clicks on a list item in Teams: // - If the thumbnail has a `tap` property: Teams will trigger the `message.ext.select-item` activity // - If no `tap` property: Teams will insert the full adaptive card into the compose box - // tap: { + // tap: { // type: "invoke", // title: item.title, // value: { diff --git a/package-lock.json b/package-lock.json index 0af3ce140..205c6581a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "examples/*" ], "devDependencies": { - "@changesets/cli": "*", + "@changesets/cli": "latest", "@turbo/gen": "^2.5.7", "bluehawk": "^1.6.0", "turbo": "^2.4.0", diff --git a/packages/api/src/activities/event/meeting-participant-join.ts b/packages/api/src/activities/event/meeting-participant-join.ts index a51043305..4830da14c 100644 --- a/packages/api/src/activities/event/meeting-participant-join.ts +++ b/packages/api/src/activities/event/meeting-participant-join.ts @@ -1,4 +1,4 @@ -import { Account } from '../../models'; +import { TeamsChannelAccount } from '../../models'; import { IActivity } from '../activity'; export interface IMeetingParticipantJoinEventActivity extends IActivity<'event'> { @@ -18,7 +18,7 @@ export interface IMeetingParticipantJoinEventActivity extends IActivity<'event'> /** * The participant account. */ - user: Account; + user: TeamsChannelAccount; /** * The participants info. diff --git a/packages/api/src/activities/event/meeting-participant-leave.ts b/packages/api/src/activities/event/meeting-participant-leave.ts index 2d9c5ba78..c04c7d4ee 100644 --- a/packages/api/src/activities/event/meeting-participant-leave.ts +++ b/packages/api/src/activities/event/meeting-participant-leave.ts @@ -1,4 +1,4 @@ -import { Account } from '../../models'; +import { TeamsChannelAccount } from '../../models'; import { IActivity } from '../activity'; export interface IMeetingParticipantLeaveEventActivity extends IActivity<'event'> { @@ -18,7 +18,7 @@ export interface IMeetingParticipantLeaveEventActivity extends IActivity<'event' /** * The participant account. */ - user: Account; + user: TeamsChannelAccount; /** * The participants info. diff --git a/packages/api/src/clients/conversation/member.ts b/packages/api/src/clients/conversation/member.ts index 9df38316e..bad8fab09 100644 --- a/packages/api/src/clients/conversation/member.ts +++ b/packages/api/src/clients/conversation/member.ts @@ -1,6 +1,6 @@ import { Client, ClientOptions } from '@microsoft/teams.common/http'; -import { Account } from '../../models'; +import { TeamsChannelAccount } from '../../models'; import { ApiClientSettings, mergeApiClientSettings } from '../api-client-settings'; export class ConversationMemberClient { @@ -29,14 +29,14 @@ export class ConversationMemberClient { } async get(conversationId: string) { - const res = await this.http.get( + const res = await this.http.get( `${this.serviceUrl}/v3/conversations/${conversationId}/members` ); return res.data; } async getById(conversationId: string, id: string) { - const res = await this.http.get( + const res = await this.http.get( `${this.serviceUrl}/v3/conversations/${conversationId}/members/${id}` ); return res.data; diff --git a/packages/api/src/models/account.ts b/packages/api/src/models/account.ts index a39055569..d7aeea1be 100644 --- a/packages/api/src/models/account.ts +++ b/packages/api/src/models/account.ts @@ -10,6 +10,63 @@ export type Account

= { readonly membershipSources?: MembershipSource[]; }; +/** + * Represents a Teams channel account, extending the basic channel account with Teams-specific properties. + * This is used to represent a user or bot in Microsoft Teams conversations. + * @see https://learn.microsoft.com/en-us/dotnet/api/microsoft.bot.schema.teams.teamschannelaccount + */ +export type TeamsChannelAccount

= { + /** + * @member {string} [id] Unique identifier for the user or bot in the channel. + */ + readonly id: string; + + /** + * @member {string} [name] Display-friendly name of the user or bot. + */ + readonly name: string; + + /** + * @member {string} [objectId] The user's Object ID in Azure Active Directory (AAD). + */ + readonly objectId?: string; + + /** + * @member {Role} [userRole] Role of the user (e.g., 'user' or 'bot'). + */ + readonly userRole: Role; + + /** + * @member {string} [givenName] Given name (first name) of the user. + */ + readonly givenName?: string; + + /** + * @member {string} [surname] Surname (last name) of the user. + */ + readonly surname?: string; + + /** + * @member {string} [email] Email address of the user. + */ + readonly email?: string; + + /** + * @member {string} [userPrincipalName] Unique User Principal Name (UPN) for the user in AAD. + */ + readonly userPrincipalName?: string; + + /** + * @member {string} [tenantId] Unique identifier for the user's Azure AD tenant. + */ + readonly tenantId?: string; + + /** + * @member {P} [properties] Custom properties associated with the account. + */ + readonly properties?: P; +}; + export type ConversationAccount = { readonly id: string; readonly tenantId?: string; diff --git a/packages/api/src/models/meeting/meeting-info.ts b/packages/api/src/models/meeting/meeting-info.ts index 94812a365..e6186e88a 100644 --- a/packages/api/src/models/meeting/meeting-info.ts +++ b/packages/api/src/models/meeting/meeting-info.ts @@ -1,4 +1,4 @@ -import { Account, ConversationAccount } from '../account'; +import { ConversationAccount, TeamsChannelAccount } from '../account'; import { MeetingDetails } from './meeting-details'; @@ -25,5 +25,5 @@ export type MeetingInfo = { /** * @member {TeamsChannelAccount} [organizer] The organizer's user information. */ - organizer?: Account; + organizer?: TeamsChannelAccount; }; diff --git a/packages/api/src/models/meeting/meeting-participant.ts b/packages/api/src/models/meeting/meeting-participant.ts index f8ae8d1b6..89a8f269b 100644 --- a/packages/api/src/models/meeting/meeting-participant.ts +++ b/packages/api/src/models/meeting/meeting-participant.ts @@ -1,4 +1,4 @@ -import { Account, ConversationAccount } from '../account'; +import { ConversationAccount, TeamsChannelAccount } from '../account'; import { Meeting } from './meeting'; @@ -11,7 +11,7 @@ export type MeetingParticipant = { /** * @member {TeamsChannelAccount} [user] The user details */ - user?: Account; + user?: TeamsChannelAccount; /** * @member {Meeting} [meeting] The meeting details.