Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 1 addition & 22 deletions packages/app-store/zoomvideo/lib/VideoApiAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,23 +79,11 @@ export const zoomUserSettingsSchema = z.object({
waiting_room: z.boolean(),
})
.nullish(),
meeting_security: z
.object({
waiting_room_settings: z
.object({
participants_to_place_in_waiting_room: z.number().optional(),
users_who_can_admit_participants_from_waiting_room: z.number().optional(),
whitelisted_domains_for_waiting_room: z.string().optional(),
})
.optional(),
})
.nullish(),
});

// https://developers.zoom.us/docs/api/rest/reference/user/methods/#operation/userSettings
// append comma separated settings here, to retrieve only these specific settings
const settingsApiFilterResp =
"default_password_for_scheduled_meetings,auto_recording,waiting_room,waiting_room_settings";
const settingsApiFilterResp = "default_password_for_scheduled_meetings,auto_recording,waiting_room";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Fix Zoom custom_query_fields paths for nested settings

Zoom expects dotted paths for nested objects. Current value risks empty sections and schema parse failures. Use fully qualified fields.

Apply this diff:

-const settingsApiFilterResp = "default_password_for_scheduled_meetings,auto_recording,waiting_room";
+const settingsApiFilterResp =
+  "schedule_meeting.default_password_for_scheduled_meetings,recording.auto_recording,in_meeting.waiting_room";

Optionally verify against docs:


🌐 Web query:

Zoom user settings API custom_query_fields: Should fields be dotted, e.g., "recording.auto_recording" and "in_meeting.waiting_room", rather than "auto_recording" and "waiting_room"?

💡 Result:

Yes — use the dotted (nested) names. For user/account settings the API exposes nested objects (recording, in_meeting, schedule_meeting, etc.), and custom_query_fields targets those nested properties (e.g. recording.auto_recording, in_meeting.waiting_room). See Zoom's settings field list that shows the nested keys and examples. [1][2]

Sources:

  • Zoom API settings field list showing nested keys (recording., in_meeting.). [1]
  • Third‑party docs / examples describing custom_query_fields and returned nested objects. [2]

Use fully qualified dotted paths for nested Zoom settings in custom_query_fields

Update the filter in packages/app-store/zoomvideo/lib/VideoApiAdapter.ts at line 86:

-const settingsApiFilterResp = "default_password_for_scheduled_meetings,auto_recording,waiting_room";
+const settingsApiFilterResp =
+  "schedule_meeting.default_password_for_scheduled_meetings,recording.auto_recording,in_meeting.waiting_room";
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const settingsApiFilterResp = "default_password_for_scheduled_meetings,auto_recording,waiting_room";
const settingsApiFilterResp =
"schedule_meeting.default_password_for_scheduled_meetings,recording.auto_recording,in_meeting.waiting_room";
🤖 Prompt for AI Agents
In packages/app-store/zoomvideo/lib/VideoApiAdapter.ts around line 86, the
filter string uses top-level names for nested Zoom meeting settings; update it
to use fully qualified dotted paths for each nested field (e.g.,
settings.default_password_for_scheduled_meetings, settings.auto_recording,
settings.waiting_room) so the custom_query_fields target the correct nested
properties when querying the Zoom API.


type ZoomRecurrence = {
end_date_time?: string;
Expand Down Expand Up @@ -187,12 +175,6 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter =>
const userSettings = await getUserSettings();
const recurrence = getRecurrence(event);
const waitingRoomEnabled = userSettings?.in_meeting?.waiting_room ?? false;
const advancedWaitingRoomSettings = userSettings?.meeting_security?.waiting_room_settings;
const hasAdvancedWaitingRoomSettings =
waitingRoomEnabled &&
!!advancedWaitingRoomSettings &&
typeof advancedWaitingRoomSettings === "object" &&
Object.keys(advancedWaitingRoomSettings).length > 0;
// Documentation at: https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate
return {
topic: event.title,
Expand All @@ -218,9 +200,6 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter =>
enforce_login: false,
registrants_email_notification: true,
waiting_room: waitingRoomEnabled,
...(hasAdvancedWaitingRoomSettings && {
waiting_room_settings: advancedWaitingRoomSettings,
}),
},
...recurrence,
};
Expand Down
Loading