import {z} from 'zod' export type GetApiVVersionEmployeesIdArgs = {id: string, version: string}; export type GetApiVVersionEmployeesIdOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const dtosEmployeeLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosDependentLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosEmergencyContactLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const schema0KeyValuePairStringString = z.object({key: z.string().optional(), value: z.string().optional()}); export const dtosPayrollGroupIdName = z.object({id: z.string(), name: z.string()}); export const dtosDepartmentLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosLocationLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosJobClassLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosDivisionLink = z.object({name: z.string(), id: z.string(), href: z.string()}); export const dtosAddress = z.object({addr1: z.string().optional(), addr2: z.string().optional(), city: z.string().optional(), state: z.string().optional(), zip: z.string().optional(), county: z.string().optional(), country: z.enum(["Afghanistan", "Albania", "Algeria", "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan", "Bahrain", "Bangladesh", "Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivarian Republic of Venezuela", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei Darussalam", "Bulgaria", "Burundi", "Cambodia", "Cameroon", "Canada", "Caribbean", "Chile", "Colombia", "Congo (DRC)", "Costa Rica", "Côte d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Eritrea", "Estonia", "Ethiopia", "Faroe Islands", "Fiji", "Finland", "France", "Gambia", "Georgia", "Germany", "Ghana", "Greece", "Greenland", "Guatemala", "Haiti", "Honduras", "Hong Kong S.A.R.", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Islamic Republic of Pakistan", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Korea", "Kuwait", "Kyrgyzstan", "Lao P.D.R.", "Latin America", "Latvia", "Lebanon", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao S.A.R.", "Malaysia", "Maldives", "Mali", "Malta", "Mexico", "Moldova", "Mongolia", "Montenegro", "Morocco", "Myanmar", "Namibia", "Nepal", "Netherlands", "New Zealand", "Nicaragua", "Nigeria", "North Macedonia", "Norway", "Oman", "Palestine", "Panama", "Paraguay", "People's Republic of China", "Peru", "Philippines", "Poland", "Portugal", "Principality of Monaco", "Puerto Rico", "Qatar", "Réunion", "Romania", "Russia", "Rwanda", "Saudi Arabia", "Senegal", "Serbia", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Somalia", "South Africa", "Spain", "Sri Lanka", "Sudan", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "U.A.E.", "Uganda", "Ukraine", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Vietnam", "Yemen", "Zambia", "Zimbabwe"]).optional(), region: z.string().optional()}); export const dtosEmployee = z.object({id: z.string().optional(), company_id: z.string().optional(), language: z.string().optional(), tobacco: z.string().optional(), disabled: z.boolean().optional(), latest_hire_date: z.string().optional(), enrollment_status: z.enum(["Not Started", "In Progress", "Finished"]).optional(), manager: dtosEmployeeLink.optional(), dependents: z.array(dtosDependentLink).optional(), emergency_contacts: z.array(dtosEmergencyContactLink).optional(), custom_fields: z.array(schema0KeyValuePairStringString).optional(), last_login: z.string().optional(), payroll_group: dtosPayrollGroupIdName.optional(), department: dtosDepartmentLink.optional(), location: dtosLocationLink.optional(), job_class: dtosJobClassLink.optional(), division: dtosDivisionLink.optional(), compensation_type: z.enum(["Salary", "Hourly"]).optional(), compensation: z.number().optional(), compensation_start_date: z.string().optional(), compensation_end_date: z.string().optional(), eid: z.string().optional(), payroll_id: z.string().optional(), type: z.enum(["Full-Time", "Part-Time", "Variable-Hour", "Contractor", "Seasonal", "Intern"]), status: z.enum(["Active", "Leave of Absence", "COBRA", "Terminated", "Resigned", "Deceased", "Retired", "Applicant", "Test"]), status_effective_date: z.string().optional(), status_reason: z.string().optional(), termination_type: z.enum(["Involuntary", "Voluntary", "Gross Misconduct"]).optional(), ssn: z.string(), first_name: z.string(), middle_name: z.string().optional(), last_name: z.string(), home_address: dtosAddress.optional(), email: z.string().optional(), birth_date: z.string().optional(), gender: z.enum(["Male", "Female", ""]).optional(), personal_email: z.string().optional(), home_phone: z.string().optional(), mobile_phone: z.string().optional(), work_phone: z.string().optional(), marital: z.enum(["", "Single", "Married", "Divorced", "Domestic Partner", "Legally Separated", "Widowed"]).optional(), hire_date: z.string().optional(), job_title: z.string().optional(), hours: z.number().optional(), pay_cycle: z.enum(["Annually", "2 Pay Periods", "3 Pay Periods", "4 Pay Periods", "5 Pay Periods", "6 Pay Periods", "7 Pay Periods", "8 Pay Periods", "9 Pay Periods", "10 Pay Periods", "11 Pay Periods", "Monthly", "13 Pay Periods", "14 Pay Periods", "15 Pay Periods", "16 Pay Periods", "17 Pay Periods", "18 Pay Periods", "19 Pay Periods", "20 Pay Periods", "21 Pay Periods", "22 Pay Periods", "23 Pay Periods", "Semi-Monthly", "25 Pay Periods", "Bi-Weekly", "27 Pay Periods", "28 Pay Periods", "29 Pay Periods", "30 Pay Periods", "31 Pay Periods", "32 Pay Periods", "33 Pay Periods", "34 Pay Periods", "35 Pay Periods", "36 Pay Periods", "37 Pay Periods", "38 Pay Periods", "39 Pay Periods", "40 Pay Periods", "41 Pay Periods", "42 Pay Periods", "43 Pay Periods", "44 Pay Periods", "45 Pay Periods", "46 Pay Periods", "47 Pay Periods", "48 Pay Periods", "49 Pay Periods", "50 Pay Periods", "51 Pay Periods", "Weekly"]).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 }; /** * employee * * GET /v{version}/employees/{id} */ export const getApiVVersionEmployeesId = async (args: GetApiVVersionEmployeesIdArgs, options: GetApiVVersionEmployeesIdOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/v${encodeURIComponent(String(args.version))}/employees/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(dtosEmployee, await res.json()) };