zaccl 3.0.18 → 4.0.0
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/docs/ECatCloudRecording.js.html +64 -26
- package/docs/ECatGroup.js.html +207 -0
- package/docs/ECatMeeting.js.html +76 -11
- package/docs/ECatUser.js.html +7 -10
- package/docs/ECatWebinar.js.html +6 -5
- package/docs/api.cloudRecording.html +328 -50
- package/docs/api.group.html +367 -0
- package/docs/api.meeting.html +437 -15
- package/docs/api.user.html +10 -10
- package/docs/api.webinar.html +5 -5
- package/docs/index.html +1 -1
- package/lib/endpoints/ECatCloudRecording.d.ts +29 -8
- package/lib/endpoints/ECatCloudRecording.js +63 -25
- package/lib/endpoints/ECatCloudRecording.js.map +1 -1
- package/lib/endpoints/ECatGroup.d.ts +39 -0
- package/lib/endpoints/ECatGroup.js +142 -0
- package/lib/endpoints/ECatGroup.js.map +1 -0
- package/lib/endpoints/ECatMeeting.d.ts +40 -10
- package/lib/endpoints/ECatMeeting.js +75 -10
- package/lib/endpoints/ECatMeeting.js.map +1 -1
- package/lib/endpoints/ECatUser.d.ts +5 -5
- package/lib/endpoints/ECatUser.js +6 -9
- package/lib/endpoints/ECatUser.js.map +1 -1
- package/lib/endpoints/ECatWebinar.d.ts +4 -4
- package/lib/endpoints/ECatWebinar.js +5 -4
- package/lib/endpoints/ECatWebinar.js.map +1 -1
- package/lib/index.d.ts +22 -0
- package/lib/index.js +19 -0
- package/lib/index.js.map +1 -1
- package/lib/shared/helpers/genVisitEndpoint.js +60 -17
- package/lib/shared/helpers/genVisitEndpoint.js.map +1 -1
- package/lib/shared/types/VisitEndpointFunc.d.ts +2 -1
- package/lib/types/ZoomAPI.d.ts +2 -0
- package/lib/types/ZoomAPI.js.map +1 -1
- package/lib/types/ZoomGroup.d.ts +10 -0
- package/lib/types/ZoomGroup.js +3 -0
- package/lib/types/ZoomGroup.js.map +1 -0
- package/lib/types/ZoomGroupMember.d.ts +12 -0
- package/lib/types/ZoomGroupMember.js +3 -0
- package/lib/types/ZoomGroupMember.js.map +1 -0
- package/lib/types/ZoomMeetingTranscript.d.ts +17 -0
- package/lib/types/ZoomMeetingTranscript.js +3 -0
- package/lib/types/ZoomMeetingTranscript.js.map +1 -0
- package/lib/types/ZoomPastMeetingDetails.d.ts +22 -0
- package/lib/types/ZoomPastMeetingDetails.js +3 -0
- package/lib/types/ZoomPastMeetingDetails.js.map +1 -0
- package/lib/types/ZoomPastMeetingParticipant.d.ts +18 -0
- package/lib/types/ZoomPastMeetingParticipant.js +3 -0
- package/lib/types/ZoomPastMeetingParticipant.js.map +1 -0
- package/lib/types/ZoomRecordingInAccount.d.ts +22 -0
- package/lib/types/ZoomRecordingInAccount.js +3 -0
- package/lib/types/ZoomRecordingInAccount.js.map +1 -0
- package/package.json +2 -2
- package/src/endpoints/ECatCloudRecording.ts +74 -29
- package/src/endpoints/ECatGroup.ts +89 -0
- package/src/endpoints/ECatMeeting.ts +81 -10
- package/src/endpoints/ECatUser.ts +6 -9
- package/src/endpoints/ECatWebinar.ts +5 -4
- package/src/index.ts +53 -0
- package/src/shared/helpers/genVisitEndpoint.ts +123 -79
- package/src/shared/types/VisitEndpointFunc.ts +4 -2
- package/src/types/ZoomAPI.ts +2 -0
- package/src/types/ZoomGroup.ts +14 -0
- package/src/types/ZoomGroupMember.ts +20 -0
- package/src/types/ZoomMeetingTranscript.ts +28 -0
- package/src/types/ZoomPastMeetingDetails.ts +38 -0
- package/src/types/ZoomPastMeetingParticipant.ts +30 -0
- package/src/types/ZoomRecordingInAccount.ts +38 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genVisitEndpoint.js","sourceRoot":"","sources":["../../../src/shared/helpers/genVisitEndpoint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"genVisitEndpoint.js","sourceRoot":"","sources":["../../../src/shared/helpers/genVisitEndpoint.ts"],"names":[],"mappings":"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"}
|
package/lib/types/ZoomAPI.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import ECatCloudRecording from '../endpoints/ECatCloudRecording';
|
|
2
|
+
import ECatGroup from '../endpoints/ECatGroup';
|
|
2
3
|
import ECatMeeting from '../endpoints/ECatMeeting';
|
|
3
4
|
import ECatUser from '../endpoints/ECatUser';
|
|
4
5
|
import ECatWebinar from '../endpoints/ECatWebinar';
|
|
@@ -11,5 +12,6 @@ interface ZoomAPI {
|
|
|
11
12
|
meeting: ECatMeeting;
|
|
12
13
|
user: ECatUser;
|
|
13
14
|
webinar: ECatWebinar;
|
|
15
|
+
group: ECatGroup;
|
|
14
16
|
}
|
|
15
17
|
export default ZoomAPI;
|
package/lib/types/ZoomAPI.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZoomAPI.js","sourceRoot":"","sources":["../../src/types/ZoomAPI.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ZoomAPI.js","sourceRoot":"","sources":["../../src/types/ZoomAPI.ts"],"names":[],"mappings":";;AAgBC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomGroup.js","sourceRoot":"","sources":["../../src/types/ZoomGroup.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomGroupMember.js","sourceRoot":"","sources":["../../src/types/ZoomGroupMember.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript for a specific zoom meeting instance
|
|
3
|
+
* @author Gabe Abrams
|
|
4
|
+
*/
|
|
5
|
+
type ZoomMeetingTranscript = {
|
|
6
|
+
meeting_id: string;
|
|
7
|
+
account_id: string;
|
|
8
|
+
meeting_topic: string;
|
|
9
|
+
host_id: string;
|
|
10
|
+
transcript_created_time: string;
|
|
11
|
+
can_download: boolean;
|
|
12
|
+
auto_delete: boolean;
|
|
13
|
+
auto_delete_date: string;
|
|
14
|
+
download_url: string | null;
|
|
15
|
+
download_restriction_reason: 'DELETED_OR_TRASHED' | 'UNSUPPORTED' | 'NO_TRANSCRIPT_DATA' | 'NOT_READY' | null;
|
|
16
|
+
};
|
|
17
|
+
export default ZoomMeetingTranscript;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomMeetingTranscript.js","sourceRoot":"","sources":["../../src/types/ZoomMeetingTranscript.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Details about a past meeting
|
|
3
|
+
* @author Gabe Abrams
|
|
4
|
+
*/
|
|
5
|
+
type ZoomPastMeetingDetails = {
|
|
6
|
+
id: number;
|
|
7
|
+
uuid: string;
|
|
8
|
+
duration: number;
|
|
9
|
+
start_time: string;
|
|
10
|
+
end_time: string;
|
|
11
|
+
host_id: string;
|
|
12
|
+
dept: string;
|
|
13
|
+
participants_count: number;
|
|
14
|
+
source: string;
|
|
15
|
+
topic: string;
|
|
16
|
+
total_minutes: number;
|
|
17
|
+
type: 0 | 1 | 2 | 3 | 4 | 7 | 8;
|
|
18
|
+
user_email: string;
|
|
19
|
+
user_name: string;
|
|
20
|
+
has_meeting_summary: boolean;
|
|
21
|
+
};
|
|
22
|
+
export default ZoomPastMeetingDetails;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomPastMeetingDetails.js","sourceRoot":"","sources":["../../src/types/ZoomPastMeetingDetails.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a participant in a Zoom past meeting.
|
|
3
|
+
* @author Gabe Abrams
|
|
4
|
+
*/
|
|
5
|
+
type ZoomPastMeetingParticipant = {
|
|
6
|
+
id?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
user_id?: string;
|
|
9
|
+
registrant_id?: string;
|
|
10
|
+
user_email?: string;
|
|
11
|
+
join_time?: string;
|
|
12
|
+
leave_time?: string;
|
|
13
|
+
duration?: number;
|
|
14
|
+
failover?: boolean;
|
|
15
|
+
status?: 'in_meeting' | 'in_waiting_room';
|
|
16
|
+
internal_user?: boolean;
|
|
17
|
+
};
|
|
18
|
+
export default ZoomPastMeetingParticipant;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomPastMeetingParticipant.js","sourceRoot":"","sources":["../../src/types/ZoomPastMeetingParticipant.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import ZoomRecordingFile from './ZoomRecordingFile';
|
|
2
|
+
/**
|
|
3
|
+
* A single recording in an account
|
|
4
|
+
* @author Gabe Abrams
|
|
5
|
+
*/
|
|
6
|
+
type ZoomRecordingInAccount = {
|
|
7
|
+
duration: number;
|
|
8
|
+
host_id: string;
|
|
9
|
+
id: number;
|
|
10
|
+
recording_count: number;
|
|
11
|
+
recording_files: ZoomRecordingFile[];
|
|
12
|
+
start_time: string;
|
|
13
|
+
topic: string;
|
|
14
|
+
total_size: number;
|
|
15
|
+
type: number;
|
|
16
|
+
uuid: string;
|
|
17
|
+
rc_zone?: string;
|
|
18
|
+
instance_id?: string;
|
|
19
|
+
service_name?: string;
|
|
20
|
+
external_storage_addr?: string;
|
|
21
|
+
};
|
|
22
|
+
export default ZoomRecordingInAccount;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomRecordingInAccount.js","sourceRoot":"","sources":["../../src/types/ZoomRecordingInAccount.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zaccl",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "The Zoom App Complete Connection Library, a project that handles everything required to build a zoom-integrated app.",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc --project ./tsconfig.json && rm -rf ./docBuilder/template;cp -r ./node_modules/docdash ./docBuilder/template; node ./docBuilder/updateBuilder.js;rm -rf ./docs;./node_modules/.bin/jsdoc -c ./docBuilder/jsdocConfig.json",
|
|
9
|
-
"sandbox": "npm run build && npx ts-node sandbox.ts"
|
|
9
|
+
"dev:sandbox": "npm run build && npx ts-node sandbox.ts"
|
|
10
10
|
},
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
@@ -14,6 +14,7 @@ import ErrorCode from '../shared/types/ErrorCode';
|
|
|
14
14
|
|
|
15
15
|
// Import shared types
|
|
16
16
|
import ZoomMeetingRecordings from '../types/ZoomMeetingRecordings';
|
|
17
|
+
import ZoomRecordingInAccount from '../types/ZoomRecordingInAccount';
|
|
17
18
|
|
|
18
19
|
// Import shared helper
|
|
19
20
|
import {
|
|
@@ -23,7 +24,72 @@ import {
|
|
|
23
24
|
|
|
24
25
|
class ECatCloudRecording extends EndpointCategory {
|
|
25
26
|
/**
|
|
26
|
-
*
|
|
27
|
+
* List recordings in the account (Medium)
|
|
28
|
+
* @author Gabe Abrams
|
|
29
|
+
* @instance
|
|
30
|
+
* @memberof api.cloudRecording
|
|
31
|
+
* @method listAccountRecordings
|
|
32
|
+
* @param opts object containing all arguments
|
|
33
|
+
* @param opts.fromYear the start of the date range to list recordings for (e.g. 2026)
|
|
34
|
+
* @param opts.fromMonth the month of the date range to list recordings for (1-12)
|
|
35
|
+
* @param [opts.fromDay] the day of the month of the date range to list recordings for (1-31, defaults to 1)
|
|
36
|
+
* @param [opts.accountId] the account ID of the account of interest (defaults to the account
|
|
37
|
+
* associated with the current access)
|
|
38
|
+
* @param [opts.onNewPage] callback function that is called when a new page of results is received.
|
|
39
|
+
* The function is passed the new page of results as an argument.
|
|
40
|
+
* @returns the list of recordings in the account
|
|
41
|
+
*/
|
|
42
|
+
async listAccountRecordings(
|
|
43
|
+
opts: {
|
|
44
|
+
fromYear: number,
|
|
45
|
+
fromMonth: number,
|
|
46
|
+
fromDay?: number,
|
|
47
|
+
accountId?: string,
|
|
48
|
+
onNewPage?: (recordings: ZoomRecordingInAccount[]) => void,
|
|
49
|
+
},
|
|
50
|
+
): Promise<ZoomRecordingInAccount[]> {
|
|
51
|
+
// Generate from date
|
|
52
|
+
const {
|
|
53
|
+
fromYear,
|
|
54
|
+
fromMonth,
|
|
55
|
+
} = opts;
|
|
56
|
+
const fromMonthPadded = fromMonth < 10 ? `0${fromMonth}` : fromMonth;
|
|
57
|
+
const fromDay = opts.fromDay ?? 1;
|
|
58
|
+
const fromDayPadded = fromDay < 10 ? `0${fromDay}` : fromDay;
|
|
59
|
+
const fromDateString = `${fromYear}-${fromMonthPadded}-${fromDayPadded}`;
|
|
60
|
+
|
|
61
|
+
// Generate to date
|
|
62
|
+
let toYear = fromYear;
|
|
63
|
+
let toMonth = opts.fromMonth + 1;
|
|
64
|
+
if (toMonth > 12) {
|
|
65
|
+
toMonth = 1;
|
|
66
|
+
toYear += 1;
|
|
67
|
+
}
|
|
68
|
+
let toMonthPadded = toMonth < 10 ? `0${toMonth}` : toMonth;
|
|
69
|
+
let toDay = fromDay;
|
|
70
|
+
let toDayPadded = toDay < 10 ? `0${toDay}` : toDay;
|
|
71
|
+
const toDateString = `${toYear}-${toMonthPadded}-${toDayPadded}`;
|
|
72
|
+
|
|
73
|
+
return this.visitEndpoint({
|
|
74
|
+
path: `/accounts/${opts.accountId ?? 'me'}/recordings`,
|
|
75
|
+
action: 'list recordings in the account',
|
|
76
|
+
method: 'GET',
|
|
77
|
+
params: {
|
|
78
|
+
page_size: 300, // max allowed page size
|
|
79
|
+
from: fromDateString,
|
|
80
|
+
to: toDateString,
|
|
81
|
+
},
|
|
82
|
+
onNewPage: opts.onNewPage,
|
|
83
|
+
itemKey: 'meetings',
|
|
84
|
+
errorMap: {
|
|
85
|
+
400: 'Bad request',
|
|
86
|
+
404: 'No recordings found',
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get all recordings of a meeting (Light)
|
|
27
93
|
* @author Aryan Pandey
|
|
28
94
|
* @instance
|
|
29
95
|
* @memberof api.cloudRecording
|
|
@@ -74,17 +140,13 @@ class ECatCloudRecording extends EndpointCategory {
|
|
|
74
140
|
}
|
|
75
141
|
|
|
76
142
|
/**
|
|
77
|
-
* List all cloud recordings of a user
|
|
143
|
+
* List all cloud recordings of a user (Medium)
|
|
78
144
|
* @author Aryan Pandey
|
|
79
145
|
* @instance
|
|
80
146
|
* @memberof api.cloudRecording
|
|
81
147
|
* @method listUserRecordings
|
|
82
148
|
* @param opts object containing all arguments
|
|
83
149
|
* @param opts.userId the user ID or email address of the user
|
|
84
|
-
* @param [opts.pageSize=300] number of records
|
|
85
|
-
* returned from a single API call
|
|
86
|
-
* @param [opts.nextPageToken] token used to pageinate
|
|
87
|
-
* through large result sets
|
|
88
150
|
* @param [opts.searchTrash=false] set to true to retrieve
|
|
89
151
|
* meeting recordings from the trash.
|
|
90
152
|
* @param [opts.startDate=1 month before today]
|
|
@@ -95,26 +157,26 @@ class ECatCloudRecording extends EndpointCategory {
|
|
|
95
157
|
* constructor or instance of Date object.
|
|
96
158
|
* Date needs to be within past 6 months. Time data (hours and seconds)
|
|
97
159
|
* is discarded
|
|
160
|
+
* @param [opts.onNewPage] callback function that is called when a new page of results is received.
|
|
161
|
+
|
|
98
162
|
* @returns List of Zoom Recordings {@link https://marketplace.zoom.us/docs/api-reference/zoom-api/cloud-recording/recordingslist#responses}
|
|
99
163
|
*/
|
|
100
164
|
async listUserRecordings(
|
|
101
165
|
opts: {
|
|
102
166
|
userId: string,
|
|
103
|
-
pageSize?: number,
|
|
104
|
-
nextPageToken?: string,
|
|
105
167
|
searchTrash?: boolean,
|
|
106
168
|
startDate?: (string | Date),
|
|
107
169
|
endDate?: (string | Date),
|
|
170
|
+
onNewPage?: (recordings: ZoomMeetingRecordings[]) => void,
|
|
108
171
|
},
|
|
109
172
|
): Promise<ZoomMeetingRecordings[]> {
|
|
110
173
|
// Destructure arguments
|
|
111
174
|
const {
|
|
112
175
|
userId,
|
|
113
176
|
searchTrash,
|
|
114
|
-
nextPageToken,
|
|
115
177
|
startDate,
|
|
116
178
|
endDate,
|
|
117
|
-
|
|
179
|
+
onNewPage,
|
|
118
180
|
} = opts;
|
|
119
181
|
|
|
120
182
|
// Declare default start Date to 1 month before
|
|
@@ -135,17 +197,6 @@ class ECatCloudRecording extends EndpointCategory {
|
|
|
135
197
|
from: formatDate(defaultDate, 'startDate'),
|
|
136
198
|
};
|
|
137
199
|
|
|
138
|
-
if (pageSize) {
|
|
139
|
-
// Throw error if pageSize is over max val of 300
|
|
140
|
-
if (pageSize > 300) {
|
|
141
|
-
throw new ZACCLError({
|
|
142
|
-
message: `We requested ${pageSize} recordings from Zoom but it can only give us 300 at a time`,
|
|
143
|
-
code: ErrorCode.InvalidPageSize,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
params.page_size = pageSize;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
200
|
if (startDate) {
|
|
150
201
|
params.from = formatDate(startDate, 'startDate');
|
|
151
202
|
}
|
|
@@ -154,19 +205,13 @@ class ECatCloudRecording extends EndpointCategory {
|
|
|
154
205
|
params.to = formatDate(endDate, 'endDate');
|
|
155
206
|
}
|
|
156
207
|
|
|
157
|
-
if (nextPageToken) {
|
|
158
|
-
params.next_page_token = nextPageToken;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
208
|
return this.visitEndpoint({
|
|
162
209
|
path: `/users/${userId}/recordings`,
|
|
163
210
|
action: 'list all cloud recordings of a user',
|
|
164
211
|
method: 'GET',
|
|
165
212
|
params,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return Array.from(body.meetings);
|
|
169
|
-
},
|
|
213
|
+
onNewPage: opts.onNewPage,
|
|
214
|
+
itemKey: 'meetings',
|
|
170
215
|
errorMap: {
|
|
171
216
|
404: {
|
|
172
217
|
1001: `We could not find the Zoom user ${userId} on this account`,
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Category of endpoints for Zoom groups
|
|
3
|
+
* @author Gabe Abrams
|
|
4
|
+
* @namespace api.group
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Import shared interfaces
|
|
8
|
+
import EndpointCategory from '../shared/interfaces/EndpointCategory';
|
|
9
|
+
|
|
10
|
+
// Import shared types
|
|
11
|
+
import ZoomGroup from '../types/ZoomGroup';
|
|
12
|
+
import ZoomGroupMember from '../types/ZoomGroupMember';
|
|
13
|
+
|
|
14
|
+
class ECatGroup extends EndpointCategory {
|
|
15
|
+
/**
|
|
16
|
+
* List groups in the account (Medium)
|
|
17
|
+
* @author Gabe Abrams
|
|
18
|
+
* @instance
|
|
19
|
+
* @memberof api.account
|
|
20
|
+
* @method listGroups
|
|
21
|
+
* @param [opts] object containing all arguments
|
|
22
|
+
* @param [opts.onNewPage] callback function that is called when a new page of results is received.
|
|
23
|
+
* @returns the list of groups in the account
|
|
24
|
+
*/
|
|
25
|
+
async listGroups(
|
|
26
|
+
opts: {
|
|
27
|
+
onNewPage?: (groups: ZoomGroup[]) => void,
|
|
28
|
+
} = {},
|
|
29
|
+
): Promise<ZoomGroup[]> {
|
|
30
|
+
return this.visitEndpoint({
|
|
31
|
+
path: '/groups',
|
|
32
|
+
action: 'list groups in the account',
|
|
33
|
+
method: 'GET',
|
|
34
|
+
params: {
|
|
35
|
+
page_size: 10, // max allowed page size
|
|
36
|
+
// TODO: change above to 300
|
|
37
|
+
},
|
|
38
|
+
errorMap: {
|
|
39
|
+
400: 'Bad request',
|
|
40
|
+
404: {
|
|
41
|
+
4130: 'No groups found for this account.',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
itemKey: 'groups',
|
|
45
|
+
onNewPage: opts.onNewPage,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* List the members within a group (Medium)
|
|
51
|
+
* @author Gabe Abrams
|
|
52
|
+
* @instance
|
|
53
|
+
* @memberof api.group
|
|
54
|
+
* @method listGroupMembers
|
|
55
|
+
* @param opts object containing all arguments
|
|
56
|
+
* @params opts.groupId the group ID of the group of interest
|
|
57
|
+
* @param [opts.onNewPage] callback function that is called when a new page of results is received.
|
|
58
|
+
* @returns the list of members in the group
|
|
59
|
+
*/
|
|
60
|
+
async listGroupMembers(
|
|
61
|
+
opts: {
|
|
62
|
+
groupId: string,
|
|
63
|
+
onNewPage?: (groupMembers: ZoomGroupMember[]) => void,
|
|
64
|
+
},): Promise<ZoomGroupMember[]> {
|
|
65
|
+
return this.visitEndpoint({
|
|
66
|
+
path: `/groups/${opts.groupId}/members`,
|
|
67
|
+
action: 'list members in a Zoom group',
|
|
68
|
+
method: 'GET',
|
|
69
|
+
params: {
|
|
70
|
+
page_size: 2000, // max allowed page size
|
|
71
|
+
},
|
|
72
|
+
itemKey: 'members',
|
|
73
|
+
errorMap: {
|
|
74
|
+
400: 'Bad request',
|
|
75
|
+
404: {
|
|
76
|
+
4130: 'No groups found for this account.',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
onNewPage: opts.onNewPage,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*------------------------------------------------------------------------*/
|
|
85
|
+
/* Export */
|
|
86
|
+
/*------------------------------------------------------------------------*/
|
|
87
|
+
|
|
88
|
+
export default ECatGroup;
|
|
89
|
+
|
|
@@ -22,10 +22,13 @@ import ZoomPollStatus from '../types/ZoomPollStatus';
|
|
|
22
22
|
import ZoomPollQuestion from '../types/ZoomPollQuestion';
|
|
23
23
|
import ZoomMeetingDetails from '../types/ZoomMeetingDetails';
|
|
24
24
|
import ZoomMeetingIdAndStartTime from '../types/ZoomMeetingIdAndStartTime';
|
|
25
|
+
import ZoomMeetingTranscript from '../types/ZoomMeetingTranscript';
|
|
26
|
+
import ZoomPastMeetingParticipant from '../types/ZoomPastMeetingParticipant';
|
|
27
|
+
import ZoomPastMeetingDetails from '../types/ZoomPastMeetingDetails';
|
|
25
28
|
|
|
26
29
|
class ECatMeeting extends EndpointCategory {
|
|
27
30
|
/**
|
|
28
|
-
* Get info on a meeting
|
|
31
|
+
* Get info on a meeting (Light)
|
|
29
32
|
* @author Gabe Abrams
|
|
30
33
|
* @author Aryan Pandey
|
|
31
34
|
* @instance
|
|
@@ -36,7 +39,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
36
39
|
* @param [opts.occurrenceId] ID for the meeting occurrence
|
|
37
40
|
* @param [opts.showAllOccurrences=false] if truthy,
|
|
38
41
|
* retrieves all past occurrences
|
|
39
|
-
* @returns Zoom meeting object
|
|
42
|
+
* @returns Zoom meeting object
|
|
40
43
|
*/
|
|
41
44
|
async get(
|
|
42
45
|
opts: {
|
|
@@ -78,7 +81,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
/**
|
|
81
|
-
* Create a new meeting
|
|
84
|
+
* Create a new meeting (Light)
|
|
82
85
|
* @author Gabe Abrams
|
|
83
86
|
* @author Aryan Pandey
|
|
84
87
|
* @instance
|
|
@@ -110,7 +113,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
/**
|
|
113
|
-
* Update a meeting
|
|
116
|
+
* Update a meeting (Light)
|
|
114
117
|
* @author Gabe Abrams
|
|
115
118
|
* @author Aryan Pandey
|
|
116
119
|
* @instance
|
|
@@ -154,7 +157,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
154
157
|
}
|
|
155
158
|
|
|
156
159
|
/**
|
|
157
|
-
* Delete a meeting
|
|
160
|
+
* Delete a meeting (Light)
|
|
158
161
|
* @author Gabe Abrams
|
|
159
162
|
* @author Aryan Pandey
|
|
160
163
|
* @instance
|
|
@@ -212,7 +215,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
212
215
|
}
|
|
213
216
|
|
|
214
217
|
/**
|
|
215
|
-
* Get a list of ended meeting instances
|
|
218
|
+
* Get a list of ended meeting instances (Medium)
|
|
216
219
|
* @author Gabe Abrams
|
|
217
220
|
* @author Aryan Pandey
|
|
218
221
|
* @instance
|
|
@@ -234,11 +237,12 @@ class ECatMeeting extends EndpointCategory {
|
|
|
234
237
|
errorMap: {
|
|
235
238
|
404: `We could not find a meeting with the ID ${opts.meetingId}`,
|
|
236
239
|
},
|
|
240
|
+
itemKey: 'meetings',
|
|
237
241
|
});
|
|
238
242
|
}
|
|
239
243
|
|
|
240
244
|
/**
|
|
241
|
-
* Get details of a past meeting instance
|
|
245
|
+
* Get details of a past meeting instance (Light)
|
|
242
246
|
* @author Yuen Ler Chow
|
|
243
247
|
* @instance
|
|
244
248
|
* @memberof api.meeting
|
|
@@ -270,7 +274,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
270
274
|
}
|
|
271
275
|
|
|
272
276
|
/**
|
|
273
|
-
* List past poll occurrences
|
|
277
|
+
* List past poll occurrences (Medium)
|
|
274
278
|
* @author Yuen Ler Chow
|
|
275
279
|
* @instance
|
|
276
280
|
* @memberof api.meeting
|
|
@@ -394,7 +398,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
394
398
|
}
|
|
395
399
|
|
|
396
400
|
/**
|
|
397
|
-
* Get poll info
|
|
401
|
+
* Get poll info (Light)
|
|
398
402
|
* @author Yuen Ler Chow
|
|
399
403
|
* @instance
|
|
400
404
|
* @memberof api.meeting
|
|
@@ -554,7 +558,7 @@ class ECatMeeting extends EndpointCategory {
|
|
|
554
558
|
* user is added as the only alt-host. This is because Zoom doesn't give us
|
|
555
559
|
* enough information to determine which user is deactivated, and thus,
|
|
556
560
|
* the only way to resolve the issue is to remove all previously existing
|
|
557
|
-
* alt-hosts.
|
|
561
|
+
* alt-hosts. (Light)
|
|
558
562
|
* @author Gabe Abrams
|
|
559
563
|
* @author Aryan Pandey
|
|
560
564
|
* @instance
|
|
@@ -631,6 +635,73 @@ class ECatMeeting extends EndpointCategory {
|
|
|
631
635
|
// return updated meeting object
|
|
632
636
|
return meetingObj;
|
|
633
637
|
}
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* Get meeting transcript (Medium)
|
|
641
|
+
* @author Gabe Abrams
|
|
642
|
+
* @instance
|
|
643
|
+
* @memberof api.meeting
|
|
644
|
+
* @method getTranscript
|
|
645
|
+
* @param opts object containing all arguments
|
|
646
|
+
* @param opts.meetingId the Zoom ID of the meeting (or UUID of a past meeting instance)
|
|
647
|
+
* @returns meeting transcript
|
|
648
|
+
*/
|
|
649
|
+
async getTranscript(
|
|
650
|
+
opts: {
|
|
651
|
+
meetingId: number,
|
|
652
|
+
},
|
|
653
|
+
): Promise<ZoomMeetingTranscript> {
|
|
654
|
+
return this.visitEndpoint({
|
|
655
|
+
path: `/meetings/${opts.meetingId}/transcript`,
|
|
656
|
+
action: 'get the meeting transcript',
|
|
657
|
+
method: 'GET',
|
|
658
|
+
errorMap: {
|
|
659
|
+
400: 'Invalid meeting ID',
|
|
660
|
+
403: 'You do not have permission to access the transcript for this meeting',
|
|
661
|
+
404: {
|
|
662
|
+
3322: 'The meeting transcript does not exist',
|
|
663
|
+
},
|
|
664
|
+
},
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
/**
|
|
669
|
+
* Get list of participants in a past meeting (Medium)
|
|
670
|
+
* @author Gabe Abrams
|
|
671
|
+
* @instance
|
|
672
|
+
* @memberof api.meeting
|
|
673
|
+
* @method listPastMeetingParticipants
|
|
674
|
+
* @param opts object containing all arguments
|
|
675
|
+
* @param opts.meetingId the Zoom UUID of the past meeting instance
|
|
676
|
+
* @param [opts.onNewPage] callback function that is called when a new page of results is received.
|
|
677
|
+
* @returns list of past meeting participants
|
|
678
|
+
*/
|
|
679
|
+
async listPastMeetingParticipants(
|
|
680
|
+
opts: {
|
|
681
|
+
meetingId: string,
|
|
682
|
+
onNewPage?: (participants: ZoomPastMeetingParticipant[]) => void,
|
|
683
|
+
},
|
|
684
|
+
): Promise<ZoomPastMeetingParticipant[]> {
|
|
685
|
+
return this.visitEndpoint({
|
|
686
|
+
path: `/past_meetings/${opts.meetingId}/participants`,
|
|
687
|
+
action: 'get the list of participants in a past meeting',
|
|
688
|
+
method: 'GET',
|
|
689
|
+
params: {
|
|
690
|
+
page_size: 300, // max allowed page size
|
|
691
|
+
},
|
|
692
|
+
itemKey: 'participants',
|
|
693
|
+
onNewPage: opts.onNewPage,
|
|
694
|
+
errorMap: {
|
|
695
|
+
400: {
|
|
696
|
+
200: 'You need a paid account to access the participant list of a past meeting.',
|
|
697
|
+
12702: 'You are not allowed to access information about meetings that occurred more than 1 year ago.',
|
|
698
|
+
},
|
|
699
|
+
404: {
|
|
700
|
+
3001: 'The meeting ID is invalid or the meeting has not ended.',
|
|
701
|
+
},
|
|
702
|
+
},
|
|
703
|
+
});
|
|
704
|
+
}
|
|
634
705
|
}
|
|
635
706
|
|
|
636
707
|
/*------------------------------------------------------------------------*/
|