* retrieve zoom usersettings and update * update to filter response * updated zoomUserSettingsSchema * abstract to new function, log error --------- Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Keith Williams <keithwillcode@gmail.com> Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
This commit is contained in:
1 file changed
+35
-5
@@ -59,6 +59,22 @@ export const zoomMeetingsSchema = z.object({
|
||||
),
|
||||
});
|
||||
|
||||
export type ZoomUserSettings = z.infer<typeof zoomUserSettingsSchema>;
|
||||
|
||||
/** @link https://developers.zoom.us/docs/api/rest/reference/user/methods/#operation/userSettings */
|
||||
export const zoomUserSettingsSchema = z.object({
|
||||
recording: z.object({
|
||||
auto_recording: z.string(),
|
||||
}),
|
||||
schedule_meeting: z.object({
|
||||
default_password_for_scheduled_meetings: z.string(),
|
||||
}),
|
||||
});
|
||||
|
||||
// https://developers.zoom.us/docs/api/rest/reference/user/methods/#operation/userSettings
|
||||
// append comma seperated settings here, to retrieve only these specific settings
|
||||
const settingsApiFilterResp = "default_password_for_scheduled_meetings,auto_recording";
|
||||
|
||||
type ZoomRecurrence = {
|
||||
end_date_time?: string;
|
||||
type: 1 | 2 | 3;
|
||||
@@ -71,7 +87,20 @@ type ZoomRecurrence = {
|
||||
const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter => {
|
||||
const tokenResponse = getTokenObjectFromCredential(credential);
|
||||
|
||||
const translateEvent = (event: CalendarEvent) => {
|
||||
const getUserSettings = async () => {
|
||||
let userSettings: ZoomUserSettings | undefined;
|
||||
try {
|
||||
const responseBody = await fetchZoomApi(
|
||||
`users/me/settings?custom_query_fields=${settingsApiFilterResp}`
|
||||
);
|
||||
userSettings = zoomUserSettingsSchema.parse(responseBody);
|
||||
} catch (err) {
|
||||
log.error("Failed to retrieve zoom user settings", safeStringify(err));
|
||||
}
|
||||
return userSettings;
|
||||
};
|
||||
|
||||
const translateEvent = async (event: CalendarEvent) => {
|
||||
const getRecurrence = ({
|
||||
recurringEvent,
|
||||
startTime,
|
||||
@@ -122,6 +151,7 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter =>
|
||||
};
|
||||
};
|
||||
|
||||
const userSettings = await getUserSettings();
|
||||
const recurrence = getRecurrence(event);
|
||||
// Documentation at: https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate
|
||||
return {
|
||||
@@ -131,7 +161,7 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter =>
|
||||
duration: (new Date(event.endTime).getTime() - new Date(event.startTime).getTime()) / 60000,
|
||||
//schedule_for: "string", TODO: Used when scheduling the meeting for someone else (needed?)
|
||||
timezone: event.organizer.timeZone,
|
||||
//password: "string", TODO: Should we use a password? Maybe generate a random one?
|
||||
password: userSettings?.schedule_meeting?.default_password_for_scheduled_meetings ?? undefined,
|
||||
agenda: event.description,
|
||||
settings: {
|
||||
host_video: true,
|
||||
@@ -144,7 +174,7 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter =>
|
||||
use_pmi: false,
|
||||
approval_type: 2,
|
||||
audio: "both",
|
||||
auto_recording: "none",
|
||||
auto_recording: userSettings?.recording?.auto_recording || "none",
|
||||
enforce_login: false,
|
||||
registrants_email_notification: true,
|
||||
},
|
||||
@@ -263,7 +293,7 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter =>
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(translateEvent(event)),
|
||||
body: JSON.stringify(await translateEvent(event)),
|
||||
});
|
||||
|
||||
const result = zoomEventResultSchema.parse(response);
|
||||
@@ -300,7 +330,7 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter =>
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(translateEvent(event)),
|
||||
body: JSON.stringify(await translateEvent(event)),
|
||||
});
|
||||
|
||||
return Promise.resolve({
|
||||
|
||||
Reference in new issue
Block a user