import {z} from 'zod' export type CurriculumType = {id?: string | undefined, name: string, titles?: string | undefined}; export type Curriculum = {id?: string | undefined, title: string, subtitle: string, company?: string | undefined, curriculum_type: string, training_sample?: (string | null) | undefined, is_technical?: boolean | undefined, is_archived?: boolean | undefined, is_published?: boolean | undefined, is_editable?: boolean | undefined, author_name?: string | undefined, author_icon_url?: (string | null) | undefined, is_already_in_use?: string | undefined, active_training_id?: string | undefined, is_available_for_free?: boolean | undefined, curriculum_type_details?: CurriculumType | undefined, action_id?: ('lesson_submit' | 'branching') | undefined, includes_video?: string | undefined, average_length?: string | undefined}; export type QuestionAnswer = {id?: string | undefined, answer: string, correct?: boolean | undefined, position?: number | undefined, lesson_question: string, next_lesson?: (string | null) | undefined, explanation?: (string | null) | undefined}; export type SimpleQuestion = {id?: string | undefined, title: string, explanation: string, position?: number | undefined, lesson: string, answers: Array, type?: ('multi_select' | 'multi_choice') | undefined}; export type LessonImageInLessonSerializers = {id?: string | undefined, company?: (string | null) | undefined, image_name?: (string | null) | undefined, image_url?: (string | null) | undefined, image_url_public?: (string | null) | undefined, editor_content?: (string | null) | undefined, content_type?: ('lesson' | 'quiz' | 'engagement_question' | 'engagement_message' | 'assessment_question_content' | null) | undefined}; export type EditorStateInLessonSerializers = {id?: string | undefined, note_editor_state?: (string | null) | undefined, summary_editor_state?: (string | null) | undefined, question_editor_state?: (string | null) | undefined, quiz_editor_state?: (string | null) | undefined, quiz_message_state?: (string | null) | undefined, content: Array}; export type CustomLessonVideo = {id?: string | undefined, lesson?: (string | null) | undefined, service_id?: number | undefined, name: string, duration?: number | undefined, hashed_id?: string | undefined, progress: unknown, thumbnail: string, processed?: boolean | undefined, plays?: number | undefined}; export type SimpleLesson = {id?: string | undefined, title?: string | undefined, subtitle?: string | undefined, note?: (string | null) | undefined, summary?: (string | null) | undefined, help_content?: (string | null) | undefined, written_content?: (string | null) | undefined, explanation_content?: (string | null) | undefined, position?: number | undefined, questions?: Array | undefined, video_url?: (string | null) | undefined, video_position?: ('bottom' | 'top') | undefined, includes_video?: boolean | undefined, show_to_browser_link_in_slack?: boolean | undefined, employees_assigned?: string | undefined, employees_finished?: string | undefined, editor_content: EditorStateInLessonSerializers, is_simple_form?: boolean | undefined, lesson_custom_video?: Array | undefined, average_length?: string | undefined}; export type TrainingTag = {id?: string | undefined, name: string} | null; export type GroupWithMinimalData = {id?: string | undefined, name: string, icon?: (string | null) | undefined}; export type DoceboTrainingManagerNotifications = {id?: string | undefined, created?: string | undefined, modified?: string | undefined, is_over_due_on?: boolean | undefined, over_due_schedule?: ('daily' | 'weekly' | 'monthly') | undefined, docebo_training_connector?: (string | null) | undefined}; export type DoceboTrainingConnector = {id?: string | undefined, docebo_manager_notifications: DoceboTrainingManagerNotifications, created?: string | undefined, modified?: string | undefined, course_id: number, code: string, uidCourse: string, title: string, type: string, training: string} | null; export type ContentImage = {id?: string | undefined, company?: (string | null) | undefined, image_name?: (string | null) | undefined, image_url?: (string | null) | undefined, image_url_public?: (string | null) | undefined, editor_content?: (string | null) | undefined}; export type RichTextEditorState = {id?: string | undefined, editor_state?: (string | null) | undefined, content?: Array | undefined}; export type CustomMessage = {id?: string | undefined, editor_content: RichTextEditorState, created?: string | undefined, modified?: string | undefined, enabled?: boolean | undefined, slack_markup?: (string | null) | undefined, polymorphic_ctype?: number | undefined} | null; export type Training = {id?: string | undefined, company?: string | undefined, curriculum: string, annual?: boolean | undefined, start_date?: (string | null) | undefined, end_date?: (string | null) | undefined, renew_date: string, renew_cycle?: ('none' | 'quarterly' | 'semi-annual' | 'annual') | undefined, days_till_due?: (number | null) | undefined, active?: boolean | undefined, created_by?: (string | null) | undefined, curriculum_detail?: Curriculum | undefined, creator_slack_uid?: string | undefined, total_employees?: string | undefined, employees_finished_count?: string | undefined, created?: string | undefined, auto_enroll?: boolean | undefined, obey_assignment_dates?: boolean | undefined, passing_grade?: number | undefined, curriculum_title?: string | undefined, curriculum_type?: string | undefined, channels?: Array | undefined, lessons: Array, tags?: (Array | null) | undefined, groups: Array, docebo_course: DoceboTrainingConnector, show_correctness_indicator_on_results?: boolean | undefined, custom_enrollment_message?: CustomMessage | undefined}; export type PatchApiApiCompaniesIdTrainingsTrainingIdArgs = {body: Training}; export type PatchApiApiCompaniesIdTrainingsTrainingIdOptions = {baseUrl?: string | undefined, Bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const curriculumType = z.object({id: z.string().optional(), name: z.string().min(1).max(60), titles: z.string().optional()}); export const curriculum = z.object({id: z.string().optional(), title: z.string().min(1).max(150), subtitle: z.string().min(1).max(255), company: z.string().optional(), curriculum_type: z.string(), training_sample: z.string().max(200).nullable().optional(), is_technical: z.boolean().optional(), is_archived: z.boolean().optional(), is_published: z.boolean().optional(), is_editable: z.boolean().optional(), author_name: z.string().optional(), author_icon_url: z.string().max(255).nullable().optional(), is_already_in_use: z.string().optional(), active_training_id: z.string().optional(), is_available_for_free: z.boolean().optional(), curriculum_type_details: curriculumType.optional(), action_id: z.enum(["lesson_submit", "branching"]).optional(), includes_video: z.string().optional(), average_length: z.string().optional()}); export const questionAnswer = z.object({id: z.string().optional(), answer: z.string().min(1).max(150), correct: z.boolean().optional(), position: z.number().int().gte(-32768).lte(32767).optional(), lesson_question: z.string(), next_lesson: z.string().nullable().optional(), explanation: z.string().nullable().optional()}); export const simpleQuestion = z.object({id: z.string().optional(), title: z.string().min(1), explanation: z.string().min(1).max(200), position: z.number().int().gte(-32768).lte(32767).optional(), lesson: z.string(), answers: z.array(questionAnswer), type: z.enum(["multi_select", "multi_choice"]).optional()}); export const lessonImageInLessonSerializers = z.object({id: z.string().optional(), company: z.string().nullable().optional(), image_name: z.string().max(200).nullable().optional(), image_url: z.string().nullable().optional(), image_url_public: z.string().nullable().optional(), editor_content: z.string().nullable().optional(), content_type: z.enum(["lesson", "quiz", "engagement_question", "engagement_message", "assessment_question_content"]).nullable().optional()}); export const editorStateInLessonSerializers = z.object({id: z.string().optional(), note_editor_state: z.string().nullable().optional(), summary_editor_state: z.string().nullable().optional(), question_editor_state: z.string().nullable().optional(), quiz_editor_state: z.string().nullable().optional(), quiz_message_state: z.string().nullable().optional(), content: z.array(lessonImageInLessonSerializers)}); export const customLessonVideo = z.object({id: z.string().optional(), lesson: z.string().nullable().optional(), service_id: z.number().int().optional(), name: z.string().min(1).max(300), duration: z.number().int().optional(), hashed_id: z.string().optional(), progress: z.string(), thumbnail: z.string().min(1).max(500), processed: z.boolean().optional(), plays: z.number().int().gte(-2147483648).lte(2147483647).optional()}); export const simpleLesson = z.object({id: z.string().optional(), title: z.string().min(1).optional(), subtitle: z.string().max(200).optional(), note: z.string().nullable().optional(), summary: z.string().nullable().optional(), help_content: z.string().max(200).nullable().optional(), written_content: z.string().max(200).nullable().optional(), explanation_content: z.string().max(200).nullable().optional(), position: z.number().int().gte(-32768).lte(32767).optional(), questions: z.array(simpleQuestion).optional(), video_url: z.string().max(200).nullable().optional(), video_position: z.enum(["bottom", "top"]).optional(), includes_video: z.boolean().optional(), show_to_browser_link_in_slack: z.boolean().optional(), employees_assigned: z.string().optional(), employees_finished: z.string().optional(), editor_content: editorStateInLessonSerializers, is_simple_form: z.boolean().optional(), lesson_custom_video: z.array(customLessonVideo).optional(), average_length: z.string().optional()}); export const trainingTag = z.object({id: z.string().optional(), name: z.string().min(1).max(60)}).nullable(); export const groupWithMinimalData = z.object({id: z.string().optional(), name: z.string().min(1).max(30), icon: z.string().max(30).nullable().optional()}); export const doceboTrainingManagerNotifications = z.object({id: z.string().optional(), created: z.string().optional(), modified: z.string().optional(), is_over_due_on: z.boolean().optional(), over_due_schedule: z.enum(["daily", "weekly", "monthly"]).optional(), docebo_training_connector: z.string().nullable().optional()}); export const doceboTrainingConnector = z.object({id: z.string().optional(), docebo_manager_notifications: doceboTrainingManagerNotifications, created: z.string().optional(), modified: z.string().optional(), course_id: z.number().int().gte(-2147483648).lte(2147483647), code: z.string().min(1).max(100), uidCourse: z.string().min(1).max(100), title: z.string().min(1).max(256), type: z.string().min(1).max(100), training: z.string()}).nullable(); export const contentImage = z.object({id: z.string().optional(), company: z.string().nullable().optional(), image_name: z.string().max(200).nullable().optional(), image_url: z.string().nullable().optional(), image_url_public: z.string().nullable().optional(), editor_content: z.string().nullable().optional()}); export const richTextEditorState = z.object({id: z.string().optional(), editor_state: z.string().nullable().optional(), content: z.array(contentImage).optional()}); export const customMessage = z.object({id: z.string().optional(), editor_content: richTextEditorState, created: z.string().optional(), modified: z.string().optional(), enabled: z.boolean().optional(), slack_markup: z.string().nullable().optional(), polymorphic_ctype: z.number().int().optional()}).nullable(); export const training = z.object({id: z.string().optional(), company: z.string().optional(), curriculum: z.string().min(1), annual: z.boolean().optional(), start_date: z.string().nullable().optional(), end_date: z.string().nullable().optional(), renew_date: z.string(), renew_cycle: z.enum(["none", "quarterly", "semi-annual", "annual"]).optional(), days_till_due: z.number().nullable().optional(), active: z.boolean().optional(), created_by: z.string().nullable().optional(), curriculum_detail: curriculum.optional(), creator_slack_uid: z.string().optional(), total_employees: z.string().optional(), employees_finished_count: z.string().optional(), created: z.string().optional(), auto_enroll: z.boolean().optional(), obey_assignment_dates: z.boolean().optional(), passing_grade: z.number().int().gte(-2147483648).lte(2147483647).optional(), curriculum_title: z.string().min(1).optional(), curriculum_type: z.string().optional(), channels: z.array(z.string().min(1).max(100)).optional(), lessons: z.array(simpleLesson), tags: z.array(trainingTag).nullable().optional(), groups: z.array(groupWithMinimalData), docebo_course: doceboTrainingConnector, show_correctness_indicator_on_results: z.boolean().optional(), custom_enrollment_message: customMessage.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 }; /** * To create a training you have to be an admin * * PATCH /api/companies/{id}/trainings/{training_id} */ export const patchApiApiCompaniesIdTrainingsTrainingId = async (args: PatchApiApiCompaniesIdTrainingsTrainingIdArgs, options?: PatchApiApiCompaniesIdTrainingsTrainingIdOptions) => { const {baseUrl = "https://app.haekka.com", fetch: fetchFn = fetch, Bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (Bearer !== undefined) headers.set("Authorization", Bearer) const url = `${baseUrl.replace(/\/+$/, '')}/api/companies/${encodeURIComponent(String(args.id))}/trainings/${encodeURIComponent(String(args.training_id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(training, await res.json()) };