import {z} from 'zod' export type V2AssemblyDatasetDescriptorsFilterAssemblySource = 'all' | 'refseq' | 'genbank'; export type V2AssemblyDatasetDescriptorsFilterAssemblyVersion = 'current' | 'all_assemblies'; export type V2reportsAssemblyLevel = 'chromosome' | 'scaffold' | 'contig' | 'complete_genome'; export type V2AssemblyDatasetDescriptorsFilterMetagenomeDerivedFilter = 'METAGENOME_DERIVED_UNSET' | 'metagenome_derived_only' | 'metagenome_derived_exclude'; export type V2AssemblyDatasetDescriptorsFilterTypeMaterialCategory = 'NONE' | 'TYPE_MATERIAL' | 'TYPE_MATERIAL_CLADE' | 'TYPE_MATERIAL_NEOTYPE' | 'TYPE_MATERIAL_REFTYPE' | 'PATHOVAR_TYPE' | 'TYPE_MATERIAL_SYN'; export type V2AssemblyDatasetReportsRequestContentType = 'COMPLETE' | 'ASSM_ACC' | 'PAIRED_ACC'; export type V2SortDirection = 'SORT_DIRECTION_UNSPECIFIED' | 'SORT_DIRECTION_ASCENDING' | 'SORT_DIRECTION_DESCENDING'; export type V2IncludeTabularHeader = 'INCLUDE_TABULAR_HEADER_FIRST_PAGE_ONLY' | 'INCLUDE_TABULAR_HEADER_ALWAYS' | 'INCLUDE_TABULAR_HEADER_NEVER'; export type GetApiGenomeAccessionAccessionsDatasetReportArgs = {accessions: Array, 'filters.reference_only'?: boolean | undefined, 'filters.assembly_source'?: V2AssemblyDatasetDescriptorsFilterAssemblySource | undefined, 'filters.has_annotation'?: boolean | undefined, 'filters.exclude_paired_reports'?: boolean | undefined, 'filters.exclude_atypical'?: boolean | undefined, 'filters.assembly_version'?: V2AssemblyDatasetDescriptorsFilterAssemblyVersion | undefined, 'filters.assembly_level'?: Array | undefined, 'filters.first_release_date'?: string | undefined, 'filters.last_release_date'?: string | undefined, 'filters.search_text'?: Array | undefined, 'filters.is_metagenome_derived'?: V2AssemblyDatasetDescriptorsFilterMetagenomeDerivedFilter | undefined, 'filters.is_type_material'?: boolean | undefined, 'filters.is_ictv_exemplar'?: boolean | undefined, 'filters.exclude_multi_isolate'?: boolean | undefined, 'filters.type_material_category'?: V2AssemblyDatasetDescriptorsFilterTypeMaterialCategory | undefined, table_fields?: Array | undefined, returned_content?: V2AssemblyDatasetReportsRequestContentType | undefined, page_size?: number | undefined, page_token?: string | undefined, 'sort.field'?: string | undefined, 'sort.direction'?: V2SortDirection | undefined, include_tabular_header?: V2IncludeTabularHeader | undefined}; export type GetApiGenomeAccessionAccessionsDatasetReportOptions = {baseUrl?: string | undefined, ApiKeyAuthHeader?: string | undefined, fetch?: typeof fetch | undefined}; export const v2reportsSourceDatabase = z.enum(["SOURCE_DATABASE_UNSPECIFIED", "SOURCE_DATABASE_GENBANK", "SOURCE_DATABASE_REFSEQ"]); export const v2reportsLineageOrganism = z.object({tax_id: z.number().int().optional(), name: z.string().optional()}); export const v2reportsInfraspecificNames = z.object({breed: z.string().optional(), cultivar: z.string().optional(), ecotype: z.string().optional(), isolate: z.string().optional(), sex: z.string().optional(), strain: z.string().optional()}); export const v2reportsOrganism = z.object({tax_id: z.number().int().optional(), sci_name: z.string().optional(), organism_name: z.string().optional(), common_name: z.string().optional(), lineage: z.array(v2reportsLineageOrganism).optional(), strain: z.string().optional(), pangolin_classification: z.string().optional(), infraspecific_names: v2reportsInfraspecificNames.optional()}); export const v2reportsAssemblyStatus = z.enum(["ASSEMBLY_STATUS_UNKNOWN", "current", "previous", "suppressed", "retired"]); export const v2reportsPairedAssembly = z.object({accession: z.string().optional(), status: v2reportsAssemblyStatus.optional(), annotation_name: z.string().optional(), only_genbank: z.string().optional(), only_refseq: z.string().optional(), changed: z.string().optional(), manual_diff: z.string().optional(), refseq_genbank_are_different: z.boolean().optional(), differences: z.string().optional()}); export const v2reportsBioProject = z.object({accession: z.string().optional(), title: z.string().optional(), parent_accession: z.string().optional(), parent_accessions: z.array(z.string()).optional()}); export const v2reportsBioProjectLineage = z.object({bioprojects: z.array(v2reportsBioProject).optional()}); export const v2reportsLinkedAssemblyType = z.enum(["LINKED_ASSEMBLY_TYPE_UNKNOWN", "alternate_pseudohaplotype_of_diploid", "principal_pseudohaplotype_of_diploid", "maternal_haplotype_of_diploid", "paternal_haplotype_of_diploid", "haplotype_1", "haplotype_2", "haplotype_3", "haplotype_4", "haploid"]); export const v2reportsLinkedAssembly = z.object({linked_assembly: z.string().optional(), assembly_type: v2reportsLinkedAssemblyType.optional()}); export const v2reportsAtypicalInfo = z.object({is_atypical: z.boolean().optional(), warnings: z.array(z.string()).optional()}); export const v2reportsBioSampleId = z.object({db: z.string().optional(), label: z.string().optional(), value: z.string().optional()}); export const v2reportsBioSampleDescription = z.object({title: z.string().optional(), organism: v2reportsOrganism.optional(), comment: z.string().optional()}); export const v2reportsBioSampleContact = z.object({lab: z.string().optional()}); export const v2reportsBioSampleOwner = z.object({name: z.string().optional(), contacts: z.array(v2reportsBioSampleContact).optional()}); export const v2reportsBioSampleAttribute = z.object({name: z.string().optional(), value: z.string().optional()}); export const v2reportsBioSampleStatus = z.object({status: z.string().optional(), when: z.string().optional()}); export const v2reportsBioSampleDescriptor = z.object({accession: z.string().optional(), last_updated: z.string().optional(), publication_date: z.string().optional(), submission_date: z.string().optional(), sample_ids: z.array(v2reportsBioSampleId).optional(), description: v2reportsBioSampleDescription.optional(), owner: v2reportsBioSampleOwner.optional(), models: z.array(z.string()).optional(), bioprojects: z.array(v2reportsBioProject).optional(), package: z.string().optional(), attributes: z.array(v2reportsBioSampleAttribute).optional(), status: v2reportsBioSampleStatus.optional(), age: z.string().optional(), biomaterial_provider: z.string().optional(), breed: z.string().optional(), collected_by: z.string().optional(), collection_date: z.string().optional(), cultivar: z.string().optional(), dev_stage: z.string().optional(), ecotype: z.string().optional(), geo_loc_name: z.string().optional(), host: z.string().optional(), host_disease: z.string().optional(), identified_by: z.string().optional(), ifsac_category: z.string().optional(), isolate: z.string().optional(), isolate_name_alias: z.string().optional(), isolation_source: z.string().optional(), lat_lon: z.string().optional(), project_name: z.string().optional(), sample_name: z.string().optional(), serovar: z.string().optional(), sex: z.string().optional(), source_type: z.string().optional(), strain: z.string().optional(), sub_species: z.string().optional(), tissue: z.string().optional(), serotype: z.string().optional()}); export const v2reportsAssemblyInfo = z.object({assembly_level: z.string().optional(), assembly_status: v2reportsAssemblyStatus.optional(), paired_assembly: v2reportsPairedAssembly.optional(), assembly_name: z.string().optional(), assembly_long_name: z.string().optional(), assembly_type: z.string().optional(), bioproject_lineage: z.array(v2reportsBioProjectLineage).optional(), bioproject_accession: z.string().optional(), submission_date: z.string().optional(), release_date: z.string().optional(), description: z.string().optional(), submitter: z.string().optional(), refseq_category: z.string().optional(), synonym: z.string().optional(), linked_assembly: z.string().optional(), linked_assemblies: z.array(v2reportsLinkedAssembly).optional(), atypical: v2reportsAtypicalInfo.optional(), genome_notes: z.array(z.string()).optional(), sequencing_tech: z.string().optional(), assembly_method: z.string().optional(), grouping_method: z.string().optional(), biosample: v2reportsBioSampleDescriptor.optional(), blast_url: z.string().optional(), comments: z.string().optional(), suppression_reason: z.string().optional(), diploid_role: v2reportsLinkedAssemblyType.optional()}); export const v2reportsAssemblyStats = z.object({total_number_of_chromosomes: z.number().int().optional(), total_sequence_length: z.string().optional(), total_ungapped_length: z.string().optional(), number_of_contigs: z.number().int().optional(), contig_n50: z.number().int().optional(), contig_l50: z.number().int().optional(), number_of_scaffolds: z.number().int().optional(), scaffold_n50: z.number().int().optional(), scaffold_l50: z.number().int().optional(), gaps_between_scaffolds_count: z.number().int().optional(), number_of_component_sequences: z.number().int().optional(), atgc_count: z.string().optional(), gc_count: z.string().optional(), gc_percent: z.number().optional(), genome_coverage: z.string().optional(), number_of_organelles: z.number().int().optional()}); export const v2reportsOrganelleInfo = z.object({assembly_name: z.string().optional(), infraspecific_name: z.string().optional(), bioproject: z.array(z.string()).optional(), description: z.string().optional(), total_seq_length: z.string().optional(), submitter: z.string().optional()}); export const v2reportsAdditionalSubmitter = z.object({genbank_accession: z.string().optional(), refseq_accession: z.string().optional(), chr_name: z.string().optional(), molecule_type: z.string().optional(), submitter: z.string().optional(), bioproject_accession: z.string().optional()}); export const v2reportsGeneCounts = z.object({total: z.number().int().optional(), protein_coding: z.number().int().optional(), non_coding: z.number().int().optional(), pseudogene: z.number().int().optional(), other: z.number().int().optional()}); export const v2reportsFeatureCounts = z.object({gene_counts: v2reportsGeneCounts.optional()}); export const v2reportsBuscoStat = z.object({busco_lineage: z.string().optional(), busco_ver: z.string().optional(), complete: z.number().optional(), single_copy: z.number().optional(), duplicated: z.number().optional(), fragmented: z.number().optional(), missing: z.number().optional(), total_count: z.string().optional()}); export const v2reportsAnnotationInfo = z.object({name: z.string().optional(), provider: z.string().optional(), release_date: z.string().optional(), report_url: z.string().optional(), stats: v2reportsFeatureCounts.optional(), busco: v2reportsBuscoStat.optional(), method: z.string().optional(), pipeline: z.string().optional(), software_version: z.string().optional(), status: z.string().optional(), release_version: z.string().optional()}); export const v2reportsWGSInfo = z.object({wgs_project_accession: z.string().optional(), master_wgs_url: z.string().optional(), wgs_contigs_url: z.string().optional()}); export const v2reportsTypeMaterial = z.object({type_label: z.string().optional(), type_display_text: z.string().optional()}); export const v2reportsCheckM = z.object({checkm_marker_set: z.string().optional(), checkm_species_tax_id: z.number().int().optional(), checkm_marker_set_rank: z.string().optional(), checkm_version: z.string().optional(), completeness: z.number().optional(), contamination: z.number().optional(), completeness_percentile: z.number().optional()}); export const v2reportsAverageNucleotideIdentityTaxonomyCheckStatus = z.enum(["TAXONOMY_CHECK_STATUS_UNKNOWN", "OK", "Failed", "Inconclusive"]); export const v2reportsAverageNucleotideIdentityMatchStatus = z.enum(["BEST_MATCH_STATUS_UNKNOWN", "approved_mismatch", "below_threshold_match", "below_threshold_mismatch", "best_match_status", "derived_species_match", "genus_match", "low_coverage", "mismatch", "status_na", "species_match", "subspecies_match", "synonym_match", "lineage_match", "below_threshold_lineage_match"]); export const v2reportsANITypeCategory = z.enum(["ANI_CATEGORY_UNKNOWN", "claderef", "category_na", "neotype", "no_type", "pathovar", "reftype", "suspected_type", "synonym", "type"]); export const v2reportsANIMatch = z.object({assembly: z.string().optional(), organism_name: z.string().optional(), category: v2reportsANITypeCategory.optional(), ani: z.number().optional(), assembly_coverage: z.number().optional(), type_assembly_coverage: z.number().optional()}); export const v2reportsAverageNucleotideIdentity = z.object({taxonomy_check_status: v2reportsAverageNucleotideIdentityTaxonomyCheckStatus.optional(), match_status: v2reportsAverageNucleotideIdentityMatchStatus.optional(), submitted_organism: z.string().optional(), submitted_species: z.string().optional(), category: v2reportsANITypeCategory.optional(), submitted_ani_match: v2reportsANIMatch.optional(), best_ani_match: v2reportsANIMatch.optional(), comment: z.string().optional()}); export const v2reportsAssemblyDataReport = z.object({accession: z.string().optional(), current_accession: z.string().optional(), paired_accession: z.string().optional(), source_database: v2reportsSourceDatabase.optional(), organism: v2reportsOrganism.optional(), assembly_info: v2reportsAssemblyInfo.optional(), assembly_stats: v2reportsAssemblyStats.optional(), organelle_info: z.array(v2reportsOrganelleInfo).optional(), additional_submitters: z.array(v2reportsAdditionalSubmitter).optional(), annotation_info: v2reportsAnnotationInfo.optional(), wgs_info: v2reportsWGSInfo.optional(), type_material: v2reportsTypeMaterial.optional(), checkm_info: v2reportsCheckM.optional(), average_nucleotide_identity: v2reportsAverageNucleotideIdentity.optional()}); export const v2reportsContentType = z.enum(["COMPLETE", "ASSM_ACC", "PAIRED_ACC"]); export const v2reportsErrorAssemblyErrorCode = z.enum(["UNKNOWN_ASSEMBLY_ERROR_CODE", "INVALID_BIOPROJECT_IDS", "NO_ASSEMBLIES_FOR_BIOPROJECTS", "INVALID_TAXON", "MISSING_SEARCH_FIELD", "INVALID_BIOSAMPLE_IDS", "NO_ASSEMBLIES_FOR_BIOSAMPLE_IDS", "NO_ASSEMBLIES_FOR_ASSEMBLY_NAMES", "INVALID_WGS_ACCESSIONS", "NO_ASSEMBLIES_FOR_WGS_ACCESSIONS"]); export const v2reportsErrorGeneErrorCode = z.enum(["UNKNOWN_GENE_ERROR_CODE", "INCOMPLETE_LOOKUP_SYMBOL", "INVALID_TAXON_GENE_ARGUMENT"]); export const v2reportsErrorOrganelleErrorCode = z.enum(["UNKNOWN_ORGANELLE_ERROR_CODE", "INVALID_ORGANELLE_TAXON", "NO_ORGANELLES_FOR_ACCESSION"]); export const v2reportsErrorVirusErrorCode = z.literal("UNKNOWN_VIRUS_ERROR_CODE"); export const v2reportsErrorTaxonomyErrorCode = z.enum(["UNKNOWN_TAXONOMY_ERROR_CODE", "INVALID_TAXONOMY_TAXON"]); export const v2reportsErrorSequenceErrorCode = z.enum(["UNKNOWN_SEQUENCE_ERROR_CODE", "INVALID_SEQUENCE_ACCESSION"]); export const v2reportsError = z.object({assembly_error_code: v2reportsErrorAssemblyErrorCode.optional(), gene_error_code: v2reportsErrorGeneErrorCode.optional(), organelle_error_code: v2reportsErrorOrganelleErrorCode.optional(), virus_error_code: v2reportsErrorVirusErrorCode.optional(), taxonomy_error_code: v2reportsErrorTaxonomyErrorCode.optional(), sequence_error_code: v2reportsErrorSequenceErrorCode.optional(), reason: z.string().optional(), message: z.string().optional(), invalid_identifiers: z.array(z.string()).optional()}); export const v2reportsWarningGeneWarningCode = z.enum(["UNKNOWN_GENE_WARNING_CODE", "ACCESSION_VERSION_MISMATCH", "REPLACED_GENE_ID", "DISCONTINUED_GENE_ID", "UNRECOGNIZED_GENE_ID", "UNRECOGNIZED_GENE_SYMBOL", "UNRECOGNIZED_ACCESSION", "UNRECOGNIZED_TAX_TOKEN", "NO_GENE_ANNOTATION_FOUND", "ABOVE_SPECIES_TAXON"]); export const v2reportsWarningReplacedId = z.object({requested: z.string().optional(), returned: z.string().optional()}); export const v2reportsWarning = z.object({gene_warning_code: v2reportsWarningGeneWarningCode.optional(), reason: z.string().optional(), message: z.string().optional(), replaced_id: v2reportsWarningReplacedId.optional(), unrecognized_identifier: z.string().optional()}); export const v2reportsMessage = z.object({error: v2reportsError.optional(), warning: v2reportsWarning.optional()}); export const v2reportsAssemblyDataReportPage = z.object({reports: z.array(v2reportsAssemblyDataReport).optional(), content_type: v2reportsContentType.optional(), total_count: z.number().int().optional(), next_page_token: z.string().optional(), messages: z.array(v2reportsMessage).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 }; /** * Get a genome assembly report by genome assembly accession * * GET /genome/accession/{accessions}/dataset_report */ export const getApiGenomeAccessionAccessionsDatasetReport = async (args: GetApiGenomeAccessionAccessionsDatasetReportArgs, options?: GetApiGenomeAccessionAccessionsDatasetReportOptions) => { const {baseUrl = "https://api.ncbi.nlm.nih.gov/datasets/v2", fetch: fetchFn = fetch, ApiKeyAuthHeader} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['filters.reference_only'] != null) query.append("filters.reference_only", String(args['filters.reference_only'])) if (args['filters.assembly_source'] != null) query.append("filters.assembly_source", String(args['filters.assembly_source'])) if (args['filters.has_annotation'] != null) query.append("filters.has_annotation", String(args['filters.has_annotation'])) if (args['filters.exclude_paired_reports'] != null) query.append("filters.exclude_paired_reports", String(args['filters.exclude_paired_reports'])) if (args['filters.exclude_atypical'] != null) query.append("filters.exclude_atypical", String(args['filters.exclude_atypical'])) if (args['filters.assembly_version'] != null) query.append("filters.assembly_version", String(args['filters.assembly_version'])) for (const item of args['filters.assembly_level'] ?? []) query.append("filters.assembly_level", String(item)) if (args['filters.first_release_date'] != null) query.append("filters.first_release_date", String(args['filters.first_release_date'])) if (args['filters.last_release_date'] != null) query.append("filters.last_release_date", String(args['filters.last_release_date'])) for (const item of args['filters.search_text'] ?? []) query.append("filters.search_text", String(item)) if (args['filters.is_metagenome_derived'] != null) query.append("filters.is_metagenome_derived", String(args['filters.is_metagenome_derived'])) if (args['filters.is_type_material'] != null) query.append("filters.is_type_material", String(args['filters.is_type_material'])) if (args['filters.is_ictv_exemplar'] != null) query.append("filters.is_ictv_exemplar", String(args['filters.is_ictv_exemplar'])) if (args['filters.exclude_multi_isolate'] != null) query.append("filters.exclude_multi_isolate", String(args['filters.exclude_multi_isolate'])) if (args['filters.type_material_category'] != null) query.append("filters.type_material_category", String(args['filters.type_material_category'])) for (const item of args.table_fields ?? []) query.append("table_fields", String(item)) if (args.returned_content != null) query.append("returned_content", String(args.returned_content)) if (args.page_size != null) query.append("page_size", String(args.page_size)) if (args.page_token != null) query.append("page_token", String(args.page_token)) if (args['sort.field'] != null) query.append("sort.field", String(args['sort.field'])) if (args['sort.direction'] != null) query.append("sort.direction", String(args['sort.direction'])) if (args.include_tabular_header != null) query.append("include_tabular_header", String(args.include_tabular_header)) if (ApiKeyAuthHeader !== undefined) headers.set("api-key", ApiKeyAuthHeader) const url = `${baseUrl.replace(/\/+$/, '')}/genome/accession/${encodeURIComponent(String(args.accessions))}/dataset_report${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(v2reportsAssemblyDataReportPage, await res.json()) };