fetch works for bots

This commit is contained in:
Vikhyath Mondreti
2025-10-29 22:01:58 -07:00
parent cd4f3effdc
commit 0ac702a8f3
4 changed files with 46 additions and 12 deletions

View File

@@ -48,6 +48,7 @@ export const MicrosoftTeamsBlock: BlockConfig<MicrosoftTeamsResponse> = {
'ChannelMessage.Send',
'ChannelMessage.Read.All',
'ChannelMember.Read.All',
'TeamsAppInstallation.ReadForTeam.All',
'Group.Read.All',
'Group.ReadWrite.All',
'Team.ReadBasic.All',

View File

@@ -513,6 +513,7 @@ export const auth = betterAuth({
'ChannelMessage.Send',
'ChannelMessage.Read.All',
'ChannelMember.Read.All',
'TeamsAppInstallation.ReadForTeam.All',
'Group.Read.All',
'Group.ReadWrite.All',
'Team.ReadBasic.All',

View File

@@ -240,6 +240,7 @@ export const OAUTH_PROVIDERS: Record<string, OAuthProviderConfig> = {
'ChannelMessage.Send',
'ChannelMessage.Read.All',
'ChannelMember.Read.All',
'TeamsAppInstallation.ReadForTeam.All',
'Group.Read.All',
'Group.ReadWrite.All',
'Team.ReadBasic.All',

View File

@@ -180,7 +180,8 @@ async function fetchChannelMembers(
channelId: string,
accessToken: string
): Promise<TeamMember[]> {
const response = await fetch(
// Fetch channel members (users only)
const membersResponse = await fetch(
`https://graph.microsoft.com/v1.0/teams/${encodeURIComponent(teamId)}/channels/${encodeURIComponent(channelId)}/members`,
{
headers: {
@@ -190,22 +191,52 @@ async function fetchChannelMembers(
}
)
if (!response.ok) {
const members: TeamMember[] = []
if (membersResponse.ok) {
const membersData = await membersResponse.json()
const userMembers = (membersData.value || []).map((member: TeamMember) => ({
id: member.id,
displayName: member.displayName || '',
userIdentityType: member.userIdentityType,
}))
members.push(...userMembers)
} else {
logger.error('Failed to fetch channel members:', {
status: response.status,
statusText: response.statusText,
status: membersResponse.status,
statusText: membersResponse.statusText,
})
return []
}
const data = await response.json()
const members = (data.value || []).map((member: TeamMember) => ({
id: member.id,
displayName: member.displayName || '',
userIdentityType: member.userIdentityType,
}))
// Fetch installed apps (includes bots) at team level
const appsResponse = await fetch(
`https://graph.microsoft.com/v1.0/teams/${encodeURIComponent(teamId)}/installedApps?$expand=teamsAppDefinition`,
{
headers: {
Authorization: `Bearer ${accessToken}`,
'Content-Type': 'application/json',
},
}
)
logger.info('Fetched channel members:', {
if (appsResponse.ok) {
const appsData = await appsResponse.json()
const bots = (appsData.value || [])
.filter((app: any) => app.teamsAppDefinition?.bot)
.map((app: any) => ({
id: app.teamsAppDefinition.bot.id || app.teamsAppDefinition.teamsAppId,
displayName: app.teamsAppDefinition.displayName || '',
userIdentityType: 'bot',
}))
members.push(...bots)
} else {
logger.warn('Failed to fetch installed apps/bots:', {
status: appsResponse.status,
statusText: appsResponse.statusText,
})
}
logger.info('Fetched channel members and bots:', {
count: members.length,
members: members.map((m: TeamMember) => ({
displayName: m.displayName,