import {z} from 'zod' export type GetApiVVersionTasksIdArgs = {id: string, version: string}; export type GetApiVVersionTasksIdOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const dtosTaskItem = z.object({id: z.string().optional(), task_id: z.string().optional(), title: z.string().optional(), type: z.enum(["General", "New Business Setup", "Payroll Connection Issue", "EaseConnect Amendment", "EaseConnect Authorization Form", "EaseConnect Evidence of Insurability", "EaseConnect Missing Enrollment", "EaseConnect Missing Info", "EaseConnect Missing Submission", "EaseConnect Pending Renewal Date", "EaseConnect Production Review", "EaseConnect Readiness", "EaseConnect Reconciliation", "EaseConnect Renewal", "EaseConnect Request Documents", "EaseConnect Review", "EaseConnect Set Up", "EaseConnect Submission Issue", "EaseConnect Testing", "EaseConnect Partner File", "EaseConnect Quality Review", "EaseConnect Self-Billing Reminder", "EaseConnect Connection Issue", "EaseConnect Enrollment App Issue"]).optional(), assignment_type: z.enum(["Application", "Broker", "Client", "Partner", "Ease"]).optional(), assignee: z.string().optional(), watchers: z.array(z.string()).optional(), company_id: z.string().optional(), description: z.string().optional(), due_date: z.string().optional(), status: z.enum(["Open", "Closed"]).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 }; /** * task * * GET /v{version}/tasks/{id} */ export const getApiVVersionTasksId = async (args: GetApiVVersionTasksIdArgs, options: GetApiVVersionTasksIdOptions) => { 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))}/tasks/${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(dtosTaskItem, await res.json()) };