import {z} from 'zod' export type AbsenceType = {id?: string | undefined, version?: string | undefined, abbreviation: string, active?: boolean | undefined, allowHalfDayRequests?: boolean | undefined, color: 'CALENDAR_BLUE' | 'CALENDAR_BLUE_GREY' | 'CALENDAR_BROWN' | 'CALENDAR_CYAN' | 'CALENDAR_DEEP_ORANGE' | 'CALENDAR_GLACIER' | 'CALENDAR_GREEN' | 'CALENDAR_GREY' | 'CALENDAR_INDIGO' | 'CALENDAR_LIME' | 'CALENDAR_ORANGE' | 'CALENDAR_PINK' | 'CALENDAR_PURPLE' | 'CALENDAR_RED' | 'CALENDAR_TEAL' | 'CALENDAR_YELLOW' | 'NO_COLOR', createdDate?: number | undefined, ignoredInResourceUtilization?: boolean | undefined, lastModifiedDate?: number | undefined, name: string, reducesLeaveEntitlement?: boolean | undefined, workTimeTrackingNecessary?: boolean | undefined}; export type CreateApiAbsenceTypeArgs = {dryRun?: boolean | undefined, body: AbsenceType}; export type CreateApiAbsenceTypeOptions = {baseUrl: string, APIToken?: string | undefined, fetch?: typeof fetch | undefined}; export const absenceType = z.object({id: z.string().optional(), version: z.string().optional(), abbreviation: z.string(), active: z.boolean().optional(), allowHalfDayRequests: z.boolean().optional(), color: z.enum(["CALENDAR_BLUE", "CALENDAR_BLUE_GREY", "CALENDAR_BROWN", "CALENDAR_CYAN", "CALENDAR_DEEP_ORANGE", "CALENDAR_GLACIER", "CALENDAR_GREEN", "CALENDAR_GREY", "CALENDAR_INDIGO", "CALENDAR_LIME", "CALENDAR_ORANGE", "CALENDAR_PINK", "CALENDAR_PURPLE", "CALENDAR_RED", "CALENDAR_TEAL", "CALENDAR_YELLOW", "NO_COLOR"]), createdDate: z.number().int().optional(), ignoredInResourceUtilization: z.boolean().optional(), lastModifiedDate: z.number().int().optional(), name: z.string(), reducesLeaveEntitlement: z.boolean().optional(), workTimeTrackingNecessary: z.boolean().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 }; /** * create a absenceType * * POST /absenceType */ export const createApiAbsenceType = async (args: CreateApiAbsenceTypeArgs, options: CreateApiAbsenceTypeOptions) => { const {baseUrl, fetch: fetchFn = fetch, APIToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args.dryRun != null) query.append("dryRun", String(args.dryRun)) if (APIToken !== undefined) headers.set("AuthenticationToken", APIToken) const url = `${baseUrl.replace(/\/+$/, '')}/absenceType${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", 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(absenceType, await res.json()) };