@campxdev/server-shared 2.0.3 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/microsoft/services/teams-meetings-graph.service.d.ts +2 -1
- package/dist/microsoft/services/teams-meetings-graph.service.d.ts.map +1 -1
- package/dist/microsoft/services/teams-meetings-graph.service.js +50 -37
- package/dist/microsoft/services/teams-meetings-graph.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ interface MeetingData {
|
|
|
6
6
|
endDateTime: string;
|
|
7
7
|
attendees?: string[];
|
|
8
8
|
coOrganizers?: string[];
|
|
9
|
+
scope: 'organization' | 'organizationAndFederated';
|
|
9
10
|
}
|
|
10
11
|
export declare class TeamsMeetingsGraphService {
|
|
11
12
|
private readonly graphBaseService;
|
|
@@ -25,7 +26,7 @@ export declare class TeamsMeetingsGraphService {
|
|
|
25
26
|
/**
|
|
26
27
|
* Get Teams meeting participants/attendance report
|
|
27
28
|
*/
|
|
28
|
-
getTeamsMeetingParticipants(meetingId: string, institutionConfig: InstitutionMicrosoftConfig, institutionId: string): Promise<any[]>;
|
|
29
|
+
getTeamsMeetingParticipants(meetingId: string, institutionConfig: InstitutionMicrosoftConfig, institutionId: string, combinedSessionDurationInMinutes?: number, minAttendancePercentage?: number): Promise<any[]>;
|
|
29
30
|
/**
|
|
30
31
|
* Transform Microsoft Graph attendance records to our expected format
|
|
31
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams-meetings-graph.service.d.ts","sourceRoot":"","sources":["../../../src/microsoft/services/teams-meetings-graph.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAM3E,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"teams-meetings-graph.service.d.ts","sourceRoot":"","sources":["../../../src/microsoft/services/teams-meetings-graph.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAM3E,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,cAAc,GAAG,0BAA0B,CAAC;CACpD;AAED,qBACa,yBAAyB;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,yBAAyB;IAExE;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACG,wBAAwB,CAC5B,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,0BAA0B,EAC7C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,CAAC;IA2B9B;;OAEG;IACG,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,0BAA0B,EAC7C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAehB;;OAEG;IACG,2BAA2B,CAC/B,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,0BAA0B,EAC7C,aAAa,EAAE,MAAM,EACrB,gCAAgC,CAAC,EAAE,MAAM,EACzC,uBAAuB,GAAE,MAAW,GACnC,OAAO,CAAC,GAAG,EAAE,CAAC;IAgFjB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuClC,OAAO,CAAC,yBAAyB;IAgCjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,KAAK,MAAM,GAEjB;CACF"}
|
|
@@ -41,15 +41,11 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
41
41
|
const graphClient = await this.graphBaseService.getApplicationGraphClient(institutionConfig, institutionId);
|
|
42
42
|
const serviceAccountId = this.getServiceAccountUserId(institutionConfig);
|
|
43
43
|
const requestBody = this.buildOnlineMeetingRequest(meetingData);
|
|
44
|
-
this.logger.log(`Creating Teams meeting: ${meetingData.subject}`);
|
|
45
|
-
this.logger.log(`Using service account: ${serviceAccountId.substring(0, 8)}...`);
|
|
46
44
|
try {
|
|
47
45
|
const response = await graphClient
|
|
48
46
|
.api(`/users/${serviceAccountId}/onlineMeetings`)
|
|
49
47
|
.header('Prefer', 'include-unknown-enum-members')
|
|
50
48
|
.post(requestBody);
|
|
51
|
-
this.logger.log(`Teams meeting created successfully with ID: ${response.id}`);
|
|
52
|
-
this.logger.log(`Meeting join URL: ${response.joinWebUrl}`);
|
|
53
49
|
return response;
|
|
54
50
|
}
|
|
55
51
|
catch (error) {
|
|
@@ -67,10 +63,8 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
67
63
|
async deleteTeamsOnlineMeeting(meetingId, institutionConfig, institutionId) {
|
|
68
64
|
const graphClient = await this.graphBaseService.getApplicationGraphClient(institutionConfig, institutionId);
|
|
69
65
|
const serviceAccountId = this.getServiceAccountUserId(institutionConfig);
|
|
70
|
-
this.logger.log(`Deleting Teams meeting: ${meetingId}`);
|
|
71
66
|
try {
|
|
72
67
|
await graphClient.api(`/users/${serviceAccountId}/onlineMeetings/${meetingId}`).delete();
|
|
73
|
-
this.logger.log(`Teams meeting deleted successfully: ${meetingId}`);
|
|
74
68
|
}
|
|
75
69
|
catch (error) {
|
|
76
70
|
this.logger.error(`Failed to delete Teams meeting ${meetingId}:`, error);
|
|
@@ -80,40 +74,47 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
80
74
|
/**
|
|
81
75
|
* Get Teams meeting participants/attendance report
|
|
82
76
|
*/
|
|
83
|
-
async getTeamsMeetingParticipants(meetingId, institutionConfig, institutionId) {
|
|
77
|
+
async getTeamsMeetingParticipants(meetingId, institutionConfig, institutionId, combinedSessionDurationInMinutes, minAttendancePercentage = 50) {
|
|
84
78
|
const graphClient = await this.graphBaseService.getApplicationGraphClient(institutionConfig, institutionId);
|
|
85
79
|
const serviceAccountId = this.getServiceAccountUserId(institutionConfig);
|
|
86
|
-
this.logger.log(`Fetching attendance reports for Teams meeting: ${meetingId}`);
|
|
87
|
-
this.logger.log(`Meeting ID length: ${meetingId.length} characters`);
|
|
88
|
-
this.logger.log(`Using service account: ${serviceAccountId}`);
|
|
89
80
|
try {
|
|
90
|
-
this.logger.log(`Retrieving meeting details from Microsoft Graph API`);
|
|
91
81
|
const meetingResponse = await graphClient
|
|
92
82
|
.api(`/users/${serviceAccountId}/onlineMeetings/${meetingId}`)
|
|
93
83
|
.get();
|
|
94
|
-
this.logger.log(`Successfully retrieved meeting details. Subject: ${meetingResponse.subject || 'N/A'}`);
|
|
95
84
|
// First get attendance reports to find the report ID
|
|
96
85
|
const attendanceReportsResponse = await graphClient
|
|
97
86
|
.api(`/users/${serviceAccountId}/onlineMeetings/${meetingId}/attendanceReports`)
|
|
98
87
|
.get();
|
|
99
|
-
this.logger.log(`Found ${attendanceReportsResponse.value?.length || 0} attendance reports`);
|
|
100
88
|
if (!attendanceReportsResponse.value || attendanceReportsResponse.value.length === 0) {
|
|
101
|
-
this.logger.log('No attendance reports found - meeting may not have ended or no participants joined');
|
|
102
89
|
return [];
|
|
103
90
|
}
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
91
|
+
// Find the report with the longest total meeting time instead of using the latest
|
|
92
|
+
// This helps avoid issues where the latest report might not capture the full session
|
|
93
|
+
let longestReport = attendanceReportsResponse.value[0];
|
|
94
|
+
let maxTotalMeetingTimeInSeconds = 0;
|
|
95
|
+
for (const report of attendanceReportsResponse.value) {
|
|
96
|
+
const totalMeetingTimeInSeconds = report.totalParticipantCount *
|
|
97
|
+
(report.meetingEndDateTime && report.meetingStartDateTime
|
|
98
|
+
? Math.abs(new Date(report.meetingEndDateTime).getTime() -
|
|
99
|
+
new Date(report.meetingStartDateTime).getTime()) / 1000
|
|
100
|
+
: 0);
|
|
101
|
+
if (totalMeetingTimeInSeconds > maxTotalMeetingTimeInSeconds) {
|
|
102
|
+
maxTotalMeetingTimeInSeconds = totalMeetingTimeInSeconds;
|
|
103
|
+
longestReport = report;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const reportId = longestReport.id;
|
|
107
|
+
// Calculate expected session duration for attendance percentage calculation
|
|
108
|
+
const expectedDurationInSeconds = combinedSessionDurationInMinutes
|
|
109
|
+
? combinedSessionDurationInMinutes * 60
|
|
110
|
+
: null;
|
|
108
111
|
// Use the direct attendance records API
|
|
109
112
|
const attendanceRecordsResponse = await graphClient
|
|
110
113
|
.api(`/users/${serviceAccountId}/onlineMeetings/${meetingId}/attendanceReports/${reportId}/attendanceRecords`)
|
|
111
114
|
.get();
|
|
112
115
|
const attendanceRecords = attendanceRecordsResponse.value || [];
|
|
113
|
-
this.logger.log(`Found ${attendanceRecords.length} attendance records`);
|
|
114
116
|
// Transform the attendance records to our expected format
|
|
115
|
-
const participants = this.transformAttendanceRecords(attendanceRecords);
|
|
116
|
-
this.logger.log(`Successfully processed ${participants.length} participants`);
|
|
117
|
+
const participants = this.transformAttendanceRecords(attendanceRecords, expectedDurationInSeconds, minAttendancePercentage);
|
|
117
118
|
return participants;
|
|
118
119
|
}
|
|
119
120
|
catch (error) {
|
|
@@ -130,22 +131,34 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
130
131
|
/**
|
|
131
132
|
* Transform Microsoft Graph attendance records to our expected format
|
|
132
133
|
*/
|
|
133
|
-
transformAttendanceRecords(attendanceRecords) {
|
|
134
|
-
return attendanceRecords.map((record) =>
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
134
|
+
transformAttendanceRecords(attendanceRecords, expectedDurationInSeconds, minAttendancePercentage = 50) {
|
|
135
|
+
return attendanceRecords.map((record) => {
|
|
136
|
+
const totalAttendanceInSeconds = record.totalAttendanceInSeconds || 0;
|
|
137
|
+
// Calculate attendance percentage if expected duration is provided
|
|
138
|
+
let attendancePercentage = 100; // Default to 100% if no expected duration
|
|
139
|
+
let meetsMinimumAttendance = true;
|
|
140
|
+
if (expectedDurationInSeconds && expectedDurationInSeconds > 0) {
|
|
141
|
+
attendancePercentage = Math.round((totalAttendanceInSeconds / expectedDurationInSeconds) * 100);
|
|
142
|
+
meetsMinimumAttendance = attendancePercentage >= minAttendancePercentage;
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
displayName: record.identity?.displayName || 'Unknown',
|
|
146
|
+
userPrincipalName: record.identity?.user?.userPrincipalName || record.emailAddress || '',
|
|
147
|
+
emailAddress: record.emailAddress || record.identity?.user?.userPrincipalName || '',
|
|
148
|
+
role: record.role || 'attendee',
|
|
149
|
+
joinedDateTime: record.attendanceIntervals?.[0]?.joinDateTime || null,
|
|
150
|
+
leftDateTime: record.attendanceIntervals?.[record.attendanceIntervals?.length - 1]?.leaveDateTime ||
|
|
151
|
+
null,
|
|
152
|
+
totalAttendanceInSeconds: totalAttendanceInSeconds,
|
|
153
|
+
attendancePercentage: attendancePercentage,
|
|
154
|
+
meetsMinimumAttendance: meetsMinimumAttendance,
|
|
155
|
+
attendanceIntervals: record.attendanceIntervals || [],
|
|
156
|
+
identity: record.identity,
|
|
157
|
+
};
|
|
158
|
+
});
|
|
145
159
|
}
|
|
146
160
|
// Private methods
|
|
147
161
|
buildOnlineMeetingRequest(meetingData) {
|
|
148
|
-
this.logger.log(`Building online meeting request for: ${meetingData.subject}`);
|
|
149
162
|
// Validate required fields
|
|
150
163
|
this.validateMeetingData(meetingData);
|
|
151
164
|
const requestBody = {
|
|
@@ -158,11 +171,12 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
158
171
|
participants: {
|
|
159
172
|
attendees: [],
|
|
160
173
|
},
|
|
174
|
+
lobbyBypassSettings: {
|
|
175
|
+
scope: meetingData.scope,
|
|
176
|
+
},
|
|
161
177
|
};
|
|
162
178
|
// Add faculty as presenters if provided
|
|
163
179
|
if (meetingData.coOrganizers && meetingData.coOrganizers.length > 0) {
|
|
164
|
-
this.logger.log(`Adding ${meetingData.coOrganizers.length} faculty members as attendees to meeting`);
|
|
165
|
-
this.logger.log(`Faculty emails: ${meetingData.coOrganizers.join(', ')}`);
|
|
166
180
|
// Construct attendees according to calendar event format
|
|
167
181
|
requestBody.participants.attendees = meetingData.coOrganizers.map((email) => ({
|
|
168
182
|
upn: email,
|
|
@@ -170,7 +184,6 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
170
184
|
identity: { '@odata.type': '#microsoft.graph.identitySet' },
|
|
171
185
|
}));
|
|
172
186
|
}
|
|
173
|
-
this.logger.log(`Meeting request built successfully`);
|
|
174
187
|
return requestBody;
|
|
175
188
|
}
|
|
176
189
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams-meetings-graph.service.js","sourceRoot":"","sources":["../../../src/microsoft/services/teams-meetings-graph.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,iFAA2E;
|
|
1
|
+
{"version":3,"file":"teams-meetings-graph.service.js","sourceRoot":"","sources":["../../../src/microsoft/services/teams-meetings-graph.service.ts"],"names":[],"mappings":"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"}
|