import {z} from 'zod' export type AlterationFilter = {copyNumberAlterationEventTypes?: {[key: string]: boolean} | undefined, includeDriver?: boolean | undefined, includeGermline?: boolean | undefined, includeSomatic?: boolean | undefined, includeUnknownOncogenicity?: boolean | undefined, includeUnknownStatus?: boolean | undefined, includeUnknownTier?: boolean | undefined, includeVUS?: boolean | undefined, mutationEventTypes?: {[key: string]: boolean} | undefined, structuralVariants?: boolean | undefined, tiersBooleanMap?: {[key: string]: boolean} | undefined}; export type DataFilterValue = {end?: number | undefined, start?: number | undefined, value?: string | undefined}; export type ClinicalDataFilter = {attributeId?: string | undefined, values?: Array | undefined}; export type DataFilter = {values?: Array | undefined}; export type GeneFilterQuery = {alterations?: (Array<'AMP' | 'DIPLOID' | 'GAIN' | 'HETLOSS' | 'HOMDEL'>) | undefined, entrezGeneId?: number | undefined, hugoGeneSymbol?: string | undefined, includeDriver?: boolean | undefined, includeGermline?: boolean | undefined, includeSomatic?: boolean | undefined, includeUnknownOncogenicity?: boolean | undefined, includeUnknownStatus?: boolean | undefined, includeUnknownTier?: boolean | undefined, includeVUS?: boolean | undefined, tiersBooleanMap?: {[key: string]: boolean} | undefined}; export type GeneFilter = {geneQueries?: Array> | undefined, molecularProfileIds?: Array | undefined}; export type GenericAssayDataFilter = {profileType?: string | undefined, stableId?: string | undefined, values?: Array | undefined}; export type GenomicDataFilter = {hugoGeneSymbol?: string | undefined, profileType?: string | undefined, values?: Array | undefined}; export type PatientTreatmentFilter = {treatment?: string | undefined}; export type OredPatientTreatmentFilters = {filters?: Array | undefined}; export type AndedPatientTreatmentFilters = {filters?: Array | undefined}; export type SampleIdentifier = {sampleId?: string | undefined, studyId?: string | undefined}; export type SampleTreatmentFilter = {time?: ('Post' | 'Pre') | undefined, treatment?: string | undefined}; export type OredSampleTreatmentFilters = {filters?: Array | undefined}; export type AndedSampleTreatmentFilters = {filters?: Array | undefined}; export type StructuralVariantGeneSubQuery = {entrezId?: number | undefined, hugoSymbol?: string | undefined, specialValue?: ('ANY_GENE' | 'NO_GENE') | undefined}; export type StructuralVariantFilterQuery = {gene1Query?: StructuralVariantGeneSubQuery | undefined, gene2Query?: StructuralVariantGeneSubQuery | undefined, includeDriver?: boolean | undefined, includeGermline?: boolean | undefined, includeSomatic?: boolean | undefined, includeUnknownOncogenicity?: boolean | undefined, includeUnknownStatus?: boolean | undefined, includeUnknownTier?: boolean | undefined, includeVUS?: boolean | undefined, tiersBooleanMap?: {[key: string]: boolean} | undefined}; export type StudyViewStructuralVariantFilter = {molecularProfileIds?: Array | undefined, structVarQueries?: Array> | undefined}; export type StudyViewFilter = {alterationFilter?: AlterationFilter | undefined, caseLists?: Array> | undefined, clinicalDataFilters?: Array | undefined, clinicalEventFilters?: Array | undefined, customDataFilters?: Array | undefined, geneFilters?: Array | undefined, genericAssayDataFilters?: Array | undefined, genomicDataFilters?: Array | undefined, genomicProfiles?: Array> | undefined, patientTreatmentFilters?: AndedPatientTreatmentFilters | undefined, patientTreatmentGroupFilters?: AndedPatientTreatmentFilters | undefined, patientTreatmentTargetFilters?: AndedPatientTreatmentFilters | undefined, sampleIdentifiers?: Array | undefined, sampleTreatmentFilters?: AndedSampleTreatmentFilters | undefined, sampleTreatmentGroupFilters?: AndedSampleTreatmentFilters | undefined, sampleTreatmentTargetFilters?: AndedSampleTreatmentFilters | undefined, structuralVariantFilters?: Array | undefined, studyIds?: Array | undefined}; export type CreateApiTreatmentsSampleArgs = {tier?: ('Agent' | 'AgentClass' | 'AgentTarget') | undefined, body: StudyViewFilter}; export type CreateApiTreatmentsSampleOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const clinicalEventSample = z.object({patientId: z.string().optional(), sampleId: z.string().optional(), studyId: z.string().optional(), timeTaken: z.number().int().optional()}); export const sampleTreatmentRow = z.object({count: z.number().int().optional(), samples: z.array(clinicalEventSample).optional(), time: z.enum(["Post", "Pre"]).optional(), treatment: z.string().optional()}); export const createApiTreatmentsSampleResponse = z.array(sampleTreatmentRow); 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 }; /** * Get all sample level treatments * * POST /treatments/sample */ export const createApiTreatmentsSample = async (args: CreateApiTreatmentsSampleArgs, options: CreateApiTreatmentsSampleOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args.tier != null) query.append("tier", String(args.tier)) const url = `${baseUrl.replace(/\/+$/, '')}/treatments/sample${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(createApiTreatmentsSampleResponse, await res.json()) };