import {z} from 'zod' export type GetApiCipr1197daysOptions = {baseUrl: string, HTTPBearer?: string | undefined, fetch?: typeof fetch | undefined}; export const cipr1197Days = z.object({radionuclide: z.string(), chemical_extension: z.string().nullable().optional(), chemical_form: z.string().nullable().optional(), age: z.string(), intake_route: z.string().nullable().optional(), amad: z.string().nullable().optional(), type: z.string().nullable().optional(), f1: z.string(), "adrenals_(Sv.Bq-1)": z.string(), "bladder_wall_(Sv.Bq-1)": z.string(), "bone_surface_(Sv.Bq-1)": z.string(), "brain_(Sv.Bq-1)": z.string(), "breast_(Sv.Bq-1)": z.string(), "gi-tract_oesophagus_(Sv.Bq-1)": z.string(), "gi-tract_st_wall_(Sv.Bq-1)": z.string(), "gi-tract_si_wall_(Sv.Bq-1)": z.string(), "gi-tract_uli_wall_(Sv.Bq-1)": z.string(), "gi-tract_lli_wall_(Sv.Bq-1)": z.string(), "gi-tract_colon_(Sv.Bq-1)": z.string(), "kidneys_(Sv.Bq-1)": z.string(), "liver_(Sv.Bq-1)": z.string(), "muscle_(Sv.Bq-1)": z.string(), "ovaries_(Sv.Bq-1)": z.string(), "pancreas_(Sv.Bq-1)": z.string(), "red_marrow_(Sv.Bq-1)": z.string(), "respiratory_tract_et_airways_(Sv.Bq-1)": z.string(), "respiratory_tract_lungs_(Sv.Bq-1)": z.string(), "skin_(Sv.Bq-1)": z.string(), "spleen_(Sv.Bq-1)": z.string(), "testes_(Sv.Bq-1)": z.string(), "thymus_(Sv.Bq-1)": z.string(), "thyroid_(Sv.Bq-1)": z.string(), "uterus_(Sv.Bq-1)": z.string(), "remainder_(Sv.Bq-1)": z.string(), "effective_dose_(Sv.Bq-1)": z.string(), comments: z.string(), id_cipr119_7days: z.number().int()}); export const getApiCipr1197daysResponse = z.array(cipr1197Days); 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 }; /** * Données issues de la publication de la CIPR 119 / Data from ICRP 119 publication * * GET /cipr119_7days */ export const getApiCipr1197days = async (options: GetApiCipr1197daysOptions) => { const {baseUrl, fetch: fetchFn = fetch, HTTPBearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (HTTPBearer !== undefined) headers.set('authorization', `Bearer ${HTTPBearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/cipr119_7days${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(getApiCipr1197daysResponse, await res.json()) };