@campxdev/server-shared 2.0.4 → 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 +1 -1
- package/dist/microsoft/services/teams-meetings-graph.service.d.ts.map +1 -1
- package/dist/microsoft/services/teams-meetings-graph.service.js +47 -37
- package/dist/microsoft/services/teams-meetings-graph.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -26,7 +26,7 @@ export declare class TeamsMeetingsGraphService {
|
|
|
26
26
|
/**
|
|
27
27
|
* Get Teams meeting participants/attendance report
|
|
28
28
|
*/
|
|
29
|
-
getTeamsMeetingParticipants(meetingId: string, institutionConfig: InstitutionMicrosoftConfig, institutionId: string): Promise<any[]>;
|
|
29
|
+
getTeamsMeetingParticipants(meetingId: string, institutionConfig: InstitutionMicrosoftConfig, institutionId: string, combinedSessionDurationInMinutes?: number, minAttendancePercentage?: number): Promise<any[]>;
|
|
30
30
|
/**
|
|
31
31
|
* Transform Microsoft Graph attendance records to our expected format
|
|
32
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;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;
|
|
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 = {
|
|
@@ -164,8 +177,6 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
164
177
|
};
|
|
165
178
|
// Add faculty as presenters if provided
|
|
166
179
|
if (meetingData.coOrganizers && meetingData.coOrganizers.length > 0) {
|
|
167
|
-
this.logger.log(`Adding ${meetingData.coOrganizers.length} faculty members as attendees to meeting`);
|
|
168
|
-
this.logger.log(`Faculty emails: ${meetingData.coOrganizers.join(', ')}`);
|
|
169
180
|
// Construct attendees according to calendar event format
|
|
170
181
|
requestBody.participants.attendees = meetingData.coOrganizers.map((email) => ({
|
|
171
182
|
upn: email,
|
|
@@ -173,7 +184,6 @@ let TeamsMeetingsGraphService = class TeamsMeetingsGraphService {
|
|
|
173
184
|
identity: { '@odata.type': '#microsoft.graph.identitySet' },
|
|
174
185
|
}));
|
|
175
186
|
}
|
|
176
|
-
this.logger.log(`Meeting request built successfully`);
|
|
177
187
|
return requestBody;
|
|
178
188
|
}
|
|
179
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;AAgBpE,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACP;IAA7B,YAA6B,gBAA2C;QAA3C,qBAAgB,GAAhB,gBAAgB,CAA2B;IAAG,CAAC;IAE5E;;OAEG;IACK,uBAAuB,CAAC,iBAA6C;QAC3E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,8BAA8B,CAAC;QAE1E,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,2EAA2E,CAC5E,CAAC;YACF,MAAM,IAAI,KAAK,CACb,yHAAyH,CAC1H,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,MAAM,GACV,4EAA4E,CAAC,IAAI,CAC/E,gBAAgB,CACjB,CAAC;QAEJ,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB,CAC5B,WAAwB,EACxB,iBAA6C,EAC7C,aAAqB;QAErB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CACvE,iBAAiB,EACjB,aAAa,CACd,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;QAEhE,IAAI,CAAC
|
|
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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"}
|