import {z} from 'zod' export type DeleteApiPresetsPresetIdArgs = {preset_id: string}; export type DeleteApiPresetsPresetIdOptions = {baseUrl?: string | undefined, Authorization?: {username: string, password: string} | undefined, fetch?: typeof fetch | undefined}; export const deleteApiPresetsPresetIdResponse = z.object({success: z.boolean(), data: z.object({id: z.string(), name: z.string(), config: z.object({view_type: z.enum(["GROUP_CALL", "WEBINAR", "AUDIO_ROOM"]), max_video_streams: z.object({mobile: z.number().int(), desktop: z.number().int()}), max_screenshare_count: z.number().int(), media: z.object({audio: z.object({enable_stereo: z.boolean().optional(), enable_high_bitrate: z.boolean().optional()}).optional(), video: z.object({quality: z.enum(["hd", "vga", "qvga"]), frame_rate: z.number().int().lte(30)}), screenshare: z.object({quality: z.enum(["hd", "vga", "qvga"]), frame_rate: z.number().int()})})}), permissions: z.object({accept_waiting_requests: z.boolean(), can_accept_production_requests: z.boolean(), can_edit_display_name: z.boolean(), can_spotlight: z.boolean(), is_recorder: z.boolean().optional(), recorder_type: z.enum(["RECORDER", "LIVESTREAMER", "NONE"]), disable_participant_audio: z.boolean(), disable_participant_screensharing: z.boolean(), disable_participant_video: z.boolean(), kick_participant: z.boolean(), pin_participant: z.boolean(), can_record: z.boolean(), can_livestream: z.boolean(), waiting_room_type: z.enum(["SKIP", "ON_PRIVILEGED_USER_ENTRY", "SKIP_ON_ACCEPT"]), plugins: z.object({can_close: z.boolean(), can_start: z.boolean(), can_edit_config: z.boolean(), config: z.union([z.string(), z.object({access_control: z.enum(["FULL_ACCESS", "VIEW_ONLY"]), handles_view_only: z.boolean()})])}), connected_meetings: z.object({can_alter_connected_meetings: z.boolean(), can_switch_connected_meetings: z.boolean(), can_switch_to_parent_meeting: z.boolean()}), polls: z.object({can_create: z.boolean(), can_vote: z.boolean(), can_view: z.boolean()}), media: z.object({video: z.object({can_produce: z.enum(["ALLOWED", "NOT_ALLOWED", "CAN_REQUEST"])}), audio: z.object({can_produce: z.enum(["ALLOWED", "NOT_ALLOWED", "CAN_REQUEST"])}), screenshare: z.object({can_produce: z.enum(["ALLOWED", "NOT_ALLOWED", "CAN_REQUEST"])})}), chat: z.object({public: z.object({can_send: z.boolean(), text: z.boolean(), files: z.boolean()}), private: z.object({can_send: z.boolean(), can_receive: z.boolean(), text: z.boolean(), files: z.boolean()})}), hidden_participant: z.boolean(), show_participant_list: z.boolean(), can_change_participant_permissions: z.boolean()}).optional(), ui: z.object({design_tokens: z.object({border_radius: z.literal("rounded"), border_width: z.literal("thin"), spacing_base: z.number(), theme: z.literal("dark"), colors: z.object({brand: z.object({"300": z.string(), "400": z.string(), "500": z.string(), "600": z.string(), "700": z.string()}), background: z.object({"600": z.string(), "700": z.string(), "800": z.string(), "900": z.string(), "1000": z.string()}), danger: z.string(), text: z.string(), text_on_brand: z.string(), success: z.string(), video_bg: z.string(), warning: z.string()}), logo: z.string()}), config_diff: z.object({}).optional()})})}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Delete a preset * * DELETE /presets/{preset_id} */ export const deleteApiPresetsPresetId = async (args: DeleteApiPresetsPresetIdArgs, options?: DeleteApiPresetsPresetIdOptions) => { const {baseUrl = "https://api.dyte.io/v2", fetch: fetchFn = fetch, Authorization} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (Authorization !== undefined) headers.set('authorization', `Basic ${btoa(`${Authorization.username}:${Authorization.password}`)}`) const url = `${baseUrl.replace(/\/+$/, '')}/presets/${encodeURIComponent(String(args.preset_id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "DELETE", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(deleteApiPresetsPresetIdResponse, await res.json()) };