import {z} from 'zod' export type GetApiObservationsUmbrellaProjectStatsArgs = {acc?: ('true' | 'false') | undefined, captive?: ('true' | 'false') | undefined, endemic?: ('true' | 'false') | undefined, geo?: ('true' | 'false') | undefined, id_please?: ('true' | 'false') | undefined, identified?: ('true' | 'false') | undefined, introduced?: ('true' | 'false') | undefined, mappable?: ('true' | 'false') | undefined, native?: ('true' | 'false') | undefined, out_of_range?: ('true' | 'false') | undefined, pcid?: ('true' | 'false') | undefined, photos?: ('true' | 'false') | undefined, popular?: ('true' | 'false') | undefined, sounds?: ('true' | 'false') | undefined, taxon_is_active?: ('true' | 'false') | undefined, threatened?: ('true' | 'false') | undefined, verifiable?: ('true' | 'false') | undefined, id?: (Array) | undefined, not_id?: Array | undefined, license?: (Array<'cc-by' | 'cc-by-nc' | 'cc-by-nd' | 'cc-by-sa' | 'cc-by-nc-nd' | 'cc-by-nc-sa' | 'cc0'>) | undefined, photo_license?: (Array<'cc-by' | 'cc-by-nc' | 'cc-by-nd' | 'cc-by-sa' | 'cc-by-nc-nd' | 'cc-by-nc-sa' | 'cc0'>) | undefined, licensed?: ('true' | 'false') | undefined, photo_licensed?: ('true' | 'false') | undefined, place_id?: (Array) | undefined, project_id?: (Array) | undefined, coords_viewable_for_proj?: ('true' | 'false') | undefined, rank?: (Array<'stateofmatter' | 'kingdom' | 'phylum' | 'subphylum' | 'superclass' | 'class' | 'subclass' | 'infraclass' | 'subterclass' | 'superorder' | 'order' | 'suborder' | 'infraorder' | 'parvorder' | 'zoosection' | 'zoosubsection' | 'superfamily' | 'epifamily' | 'family' | 'subfamily' | 'supertribe' | 'tribe' | 'subtribe' | 'genus' | 'genushybrid' | 'subgenus' | 'section' | 'subsection' | 'complex' | 'species' | 'hybrid' | 'subspecies' | 'variety' | 'form' | 'infrahybrid'>) | undefined, site_id?: Array | undefined, sound_license?: (Array<'cc-by' | 'cc-by-nc' | 'cc-by-nd' | 'cc-by-sa' | 'cc-by-nc-nd' | 'cc-by-nc-sa' | 'cc0'>) | undefined, taxon_id?: Array | undefined, without_taxon_id?: Array | undefined, taxon_name?: string | undefined, user_id?: Array | undefined, user_login?: Array | undefined, hour?: Array | undefined, day?: Array | undefined, month?: Array | undefined, year?: Array | undefined, created_day?: Array | undefined, created_month?: Array | undefined, created_year?: Array | undefined, term_id?: Array | undefined, term_value_id?: Array | undefined, without_term_value_id?: Array | undefined, term_id_or_unknown?: Array | undefined, annotation_user_id?: Array | undefined, acc_above?: number | undefined, acc_below?: number | undefined, acc_below_or_unknown?: number | undefined, d1?: string | undefined, d2?: string | undefined, created_d1?: string | undefined, created_d2?: string | undefined, created_on?: string | undefined, observed_on?: string | undefined, unobserved_by_user_id?: string | undefined, apply_project_rules_for?: string | undefined, observation_accuracy_experiment_id?: Array | undefined, cs?: string | undefined, csa?: string | undefined, csi?: (Array<'LC' | 'NT' | 'VU' | 'EN' | 'CR' | 'EW' | 'EX'>) | undefined, geoprivacy?: (Array<'obscured' | 'obscured_private' | 'open' | 'private'>) | undefined, taxon_geoprivacy?: (Array<'obscured' | 'obscured_private' | 'open' | 'private'>) | undefined, obscuration?: (Array<'obscured' | 'private' | 'none'>) | undefined, hrank?: (Array<'stateofmatter' | 'kingdom' | 'phylum' | 'subphylum' | 'superclass' | 'class' | 'subclass' | 'infraclass' | 'subterclass' | 'superorder' | 'order' | 'suborder' | 'infraorder' | 'parvorder' | 'zoosection' | 'zoosubsection' | 'superfamily' | 'epifamily' | 'family' | 'subfamily' | 'supertribe' | 'tribe' | 'subtribe' | 'genus' | 'genushybrid' | 'subgenus' | 'section' | 'subsection' | 'complex' | 'species' | 'hybrid' | 'subspecies' | 'variety' | 'form' | 'infrahybrid'>) | undefined, lrank?: (Array<'stateofmatter' | 'kingdom' | 'phylum' | 'subphylum' | 'superclass' | 'class' | 'subclass' | 'infraclass' | 'subterclass' | 'superorder' | 'order' | 'suborder' | 'infraorder' | 'parvorder' | 'zoosection' | 'zoosubsection' | 'superfamily' | 'epifamily' | 'family' | 'subfamily' | 'supertribe' | 'tribe' | 'subtribe' | 'genus' | 'genushybrid' | 'subgenus' | 'section' | 'subsection' | 'complex' | 'species' | 'hybrid' | 'subspecies' | 'variety' | 'form' | 'infrahybrid'>) | undefined, iconic_taxa?: (Array<'Actinopterygii' | 'Animalia' | 'Amphibia' | 'Arachnida' | 'Aves' | 'Chromista' | 'Fungi' | 'Insecta' | 'Mammalia' | 'Mollusca' | 'Reptilia' | 'Plantae' | 'Protozoa' | 'unknown'>) | undefined, id_above?: number | undefined, id_below?: number | undefined, identifications?: ('most_agree' | 'most_disagree' | 'some_agree') | undefined, disagreements?: ('true' | 'false') | undefined, lat?: number | undefined, lng?: number | undefined, radius?: number | undefined, nelat?: number | undefined, nelng?: number | undefined, swlat?: number | undefined, swlng?: number | undefined, list_id?: number | undefined, not_in_project?: Array | undefined, not_matching_project_rules_for?: string | undefined, q?: string | undefined, search_on?: ('names' | 'tags' | 'description' | 'place' | 'taxon_page_obs_photos') | undefined, quality_grade?: (Array<'casual' | 'needs_id' | 'research'>) | undefined, not_casual_excluding_captive?: ('true' | 'false') | undefined, without_field?: string | undefined, outlink_source?: string | undefined, updated_since?: string | undefined, viewer_id?: number | undefined, reviewed?: ('true' | 'false') | undefined, expected_nearby?: ('true' | 'false') | undefined, fails_dqa_accurate?: ('true' | 'false') | undefined, fails_dqa_date?: ('true' | 'false') | undefined, fails_dqa_evidence?: ('true' | 'false') | undefined, fails_dqa_location?: ('true' | 'false') | undefined, fails_dqa_needs_id?: ('true' | 'false') | undefined, fails_dqa_recent?: ('true' | 'false') | undefined, fails_dqa_subject?: ('true' | 'false') | undefined, fails_dqa_wild?: ('true' | 'false') | undefined, user_after?: string | undefined, user_before?: string | undefined, locale?: string | undefined, preferred_place_id?: number | undefined, ttl?: number | undefined, page?: number | undefined, per_page?: number | undefined, order?: ('desc' | 'asc') | undefined, order_by?: ('created_at' | 'geo_score' | 'id' | 'observed_on' | 'random' | 'species_guess' | 'updated_at' | 'votes') | undefined, only_id?: ('true' | 'false') | undefined, fields: unknown, 'X-HTTP-Method-Override'?: string | undefined}; export type GetApiObservationsUmbrellaProjectStatsOptions = {baseUrl?: string | undefined, userJwtOptional?: string | undefined, fetch?: typeof fetch | undefined}; export const site = z.object({id: z.number().int(), icon_url: z.string().optional(), locale: z.string().nullable().optional(), name: z.string().optional(), place_id: z.number().int().nullable().optional(), site_name_short: z.string().nullable().optional(), url: z.string().optional()}).nullable(); export const user = z.object({id: z.number().int(), uuid: z.string().optional(), created_at: z.string().optional(), description: z.string().nullable().optional(), faved_project_ids: z.array(z.number()).optional(), icon: z.string().nullable().optional(), icon_url: z.string().nullable().optional(), identifications_count: z.number().int().optional(), journal_posts_count: z.number().int().optional(), annotated_observations_count: z.number().int().optional(), last_active: z.string().optional(), login: z.string().optional(), monthly_supporter: z.boolean().nullable().optional(), name: z.string().nullable().optional(), observations_count: z.number().int().optional(), orcid: z.string().nullable().optional(), preferences: z.object({prefers_community_taxa: z.boolean().optional(), prefers_observation_fields_by: z.enum(["anyone", "curators", "observer"]).optional(), prefers_project_addition_by: z.enum(["any", "joined", "none"]).optional()}).optional(), roles: z.array(z.string()).optional(), site: site.optional(), site_id: z.number().int().nullable().optional(), spam: z.boolean().optional(), species_count: z.number().int().optional(), suspended: z.boolean().optional(), updated_at: z.string().optional()}).nullable(); export const flag = z.object({id: z.number().int(), comment: z.string().nullable().optional(), created_at: z.string().optional(), created_at_utc: z.string().nullable().optional(), flag: z.string().optional(), flaggable_content: z.string().nullable().optional(), flaggable_id: z.number().int().nullable().optional(), flaggable_type: z.string().nullable().optional(), flaggable_user_id: z.number().int().nullable().optional(), resolved: z.boolean().optional(), resolver_id: z.number().int().nullable().optional(), resolved_at: z.string().nullable().optional(), updated_at: z.string().nullable().optional(), updated_at_utc: z.string().nullable().optional(), user: user.optional(), user_id: z.number().int().optional(), uuid: z.string().nullable().optional()}); export const observationField = z.object({id: z.number().int(), allowed_values: z.string().nullable().optional(), datatype: z.string().optional(), description: z.string().nullable().optional(), description_autocomplete: z.string().nullable().optional(), name: z.string().optional(), name_autocomplete: z.string().optional(), users_count: z.number().int().nullable().optional(), uuid: z.string().optional(), values_count: z.number().int().nullable().optional()}); export const polygonGeoJson = z.object({type: z.string(), coordinates: z.union([z.array(z.array(z.array(z.array(z.number())))), z.array(z.array(z.array(z.number())))])}).nullable(); export const pointGeoJson = z.object({coordinates: z.array(z.number()), type: z.string()}).nullable(); export const place = z.object({id: z.number().int(), admin_level: z.number().int().nullable().optional(), ancestor_place_ids: z.array(z.number().int()).nullable().optional(), bbox_area: z.number().nullable().optional(), bounding_box_geojson: polygonGeoJson.optional(), display_name: z.string().nullable().optional(), display_name_autocomplete: z.string().nullable().optional(), geometry_geojson: polygonGeoJson.optional(), location: z.string().nullable().optional(), matched_term: z.string().nullable().optional(), name: z.string().optional(), observations_count: z.number().int().optional(), place_type: z.number().int().nullable().optional(), point_geojson: pointGeoJson.optional(), slug: z.string().nullable().optional(), universal_search_rank: z.number().int().nullable().optional(), user: user.optional(), uuid: z.string().optional(), without_check_list: z.boolean().nullable().optional()}).nullable(); export const conservationStatus = z.object({id: z.number().int(), authority: z.string().nullable().optional(), description: z.string().nullable().optional(), geoprivacy: z.string().nullable().optional(), iucn: z.number().int().optional(), iucn_status: z.string().optional(), iucn_status_code: z.string().optional(), place: z.object({id: z.number().int().optional(), name: z.string().optional(), display_name: z.string().optional(), ancestry: z.string().nullable().optional()}).nullable().optional(), place_id: z.number().int().nullable().optional(), source_id: z.number().int().nullable().optional(), status: z.string().optional(), status_name: z.string().optional(), taxon_id: z.number().int().optional(), user_id: z.number().int().nullable().optional(), url: z.string().nullable().optional()}).nullable(); export const dateDetails = z.object({date: z.string(), day: z.number().int(), hour: z.number().int(), month: z.number().int(), week: z.number().int(), year: z.number().int()}).nullable(); export const moderatorAction = z.object({id: z.number().int(), created_at: z.string().optional(), created_at_details: dateDetails.optional(), user: user.optional(), action: z.string().optional(), reason: z.string().optional(), private: z.boolean().optional()}); export const photo = z.object({id: z.number().int(), attribution: z.string().optional(), attribution_name: z.string().nullable().optional(), flags: z.array(flag).optional(), hidden: z.boolean().optional(), large_url: z.string().nullable().optional(), license_code: z.string().nullable().optional(), medium_url: z.string().nullable().optional(), moderator_actions: z.array(moderatorAction).optional(), native_page_url: z.string().nullable().optional(), native_photo_id: z.string().nullable().optional(), original_dimensions: z.object({height: z.number().int().nullable().optional(), width: z.number().int().nullable().optional()}).nullable().optional(), original_url: z.string().nullable().optional(), small_url: z.string().nullable().optional(), square_url: z.string().nullable().optional(), type: z.string().optional(), url: z.string().nullable().optional(), original_filename: z.string().nullable().optional()}).nullable(); export const list = z.object({id: z.number().int(), title: z.string().nullable().optional()}).nullable(); export const taxon: z.ZodType = z.object({id: z.number().int(), uuid: z.string().optional(), ancestors: z.array(z.lazy(() => taxon)).optional(), ancestor_ids: z.array(z.number().int()).optional(), ancestry: z.string().nullable().optional(), atlas_id: z.number().int().nullable().optional(), children: z.array(z.lazy(() => taxon)).optional(), complete_rank: z.string().optional(), complete_species_count: z.number().int().nullable().optional(), conservation_status: conservationStatus.optional(), conservation_statuses: z.array(conservationStatus).optional(), created_at: z.string().optional(), current_synonymous_taxon_ids: z.array(z.number().int()).nullable().optional(), default_photo: photo.optional(), endemic: z.boolean().optional(), english_common_name: z.string().optional(), establishment_means: z.object({establishment_means: z.string().optional(), id: z.number().int().optional(), place: z.object({id: z.number().int().optional(), name: z.string().optional(), display_name: z.string().optional(), ancestry: z.string().nullable().optional()}).optional()}).optional(), preferred_establishment_means: z.string().optional(), extinct: z.boolean().optional(), provisional: z.boolean().optional(), flag_counts: z.object({resolved: z.number().int().optional(), unresolved: z.number().int().optional()}).optional(), iconic_taxon_id: z.number().int().nullable().optional(), iconic_taxon_name: z.string().nullable().optional(), introduced: z.boolean().optional(), is_active: z.boolean().optional(), listed_taxa: z.array(z.object({id: z.number().int().optional(), establishment_means: z.string().optional(), list: list.optional(), taxon: z.lazy(() => taxon.optional()), taxon_id: z.number().int().optional(), place: place.optional()})).optional(), listed_taxa_count: z.number().int().optional(), matched_term: z.string().optional(), min_species_ancestry: z.string().optional(), min_species_taxon_id: z.number().int().optional(), name: z.string().optional(), native: z.boolean().optional(), observations_count: z.number().int().optional(), parent_id: z.number().int().nullable().optional(), photos_locked: z.boolean().optional(), preferred_common_name: z.string().nullable().optional(), preferred_common_names: z.array(z.unknown()).nullable().optional(), rank: z.string().optional(), rank_level: z.number().optional(), representative_photo: photo.optional(), statuses: z.array(z.unknown()).optional(), taxon_changes_count: z.number().int().optional(), taxon_photos: z.array(z.object({taxon: z.lazy(() => taxon.optional()), taxon_id: z.number().int().optional(), photo: photo.optional()})).optional(), taxon_schemes_count: z.number().int().optional(), threatened: z.boolean().optional(), universal_search_rank: z.number().int().optional(), vision: z.boolean().optional(), wikipedia_summary: z.string().nullable().optional(), wikipedia_url: z.string().nullable().optional()}).nullable(); export const project: z.ZodType = z.object({id: z.number().int(), admins: z.array(z.object({id: z.number().int().optional(), project_id: z.number().int().optional(), role: z.string().optional(), user: user.optional(), user_id: z.number().int().optional()})).optional(), banner_color: z.string().nullable().optional(), created_at: z.string().optional(), delegated_project_id: z.number().int().nullable().optional(), description: z.string().nullable().optional(), flags: z.array(flag).optional(), header_image_contain: z.boolean().optional(), header_image_file_name: z.string().nullable().optional(), header_image_url: z.string().nullable().optional(), hide_leaderboard: z.boolean().optional(), hide_title: z.boolean().optional(), hide_umbrella_map_flags: z.boolean().optional(), icon: z.string().nullable().optional(), icon_file_name: z.string().nullable().optional(), is_delegated_umbrella: z.boolean().nullable().optional(), is_umbrella: z.boolean().optional(), latitude: z.string().optional(), location: z.string().nullable().optional(), longitude: z.string().optional(), membership_model: z.string().nullable().optional(), observation_requirements_updated_at: z.string().nullable().optional(), place_id: z.number().int().nullable().optional(), prefers_user_trust: z.boolean().nullable().optional(), project_observation_fields: z.array(z.object({id: z.number().int(), observation_field: observationField.optional(), position: z.number().int().optional(), required: z.boolean().nullable().optional()})).optional(), project_observation_rules: z.array(z.object({id: z.number().int(), operand_id: z.number().int().nullable().optional(), operand_type: z.string().nullable().optional(), operator: z.string().optional(), place: place.optional(), project: z.lazy(() => project.optional()), taxon: taxon.optional(), user: user.optional()})).optional(), project_type: z.string().nullable().optional(), rule_preferences: z.array(z.object({field: z.string().optional(), value: z.unknown()})).optional(), search_parameters: z.array(z.object({field: z.string().optional(), value: z.unknown(), value_bool: z.boolean().optional(), value_date: z.array(z.string()).optional(), value_keyword: z.unknown(), value_number: z.union([z.number(), z.array(z.number())]).optional()})).optional(), site_features: z.array(z.object({noteworthy: z.boolean().optional(), site_id: z.number().int().optional(), featured_at: z.string().optional()})).nullable().optional(), slug: z.string().optional(), terms: z.string().nullable().optional(), title: z.string().optional(), updated_at: z.string().optional(), user: user.optional(), user_id: z.number().int().optional(), user_ids: z.array(z.number().int()).optional(), umbrella_project_list_sort: z.string().nullable().optional()}).nullable(); export const resultsObservationsUmbrellaProjectStats = z.object({total_results: z.number().int(), page: z.number().int(), per_page: z.number().int(), results: z.array(z.object({observation_count: z.number().int(), species_count: z.number().int(), observers_count: z.number().int(), project: project}))}); 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 }; /** * Fetch umbrella project stats * * GET /observations/umbrella_project_stats */ export const getApiObservationsUmbrellaProjectStats = async (args: GetApiObservationsUmbrellaProjectStatsArgs, options?: GetApiObservationsUmbrellaProjectStatsOptions) => { const {baseUrl = "https://api.inaturalist.org/v2", fetch: fetchFn = fetch, userJwtOptional} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.acc != null) query.append("acc", String(args.acc)) if (args.captive != null) query.append("captive", String(args.captive)) if (args.endemic != null) query.append("endemic", String(args.endemic)) if (args.geo != null) query.append("geo", String(args.geo)) if (args.id_please != null) query.append("id_please", String(args.id_please)) if (args.identified != null) query.append("identified", String(args.identified)) if (args.introduced != null) query.append("introduced", String(args.introduced)) if (args.mappable != null) query.append("mappable", String(args.mappable)) if (args.native != null) query.append("native", String(args.native)) if (args.out_of_range != null) query.append("out_of_range", String(args.out_of_range)) if (args.pcid != null) query.append("pcid", String(args.pcid)) if (args.photos != null) query.append("photos", String(args.photos)) if (args.popular != null) query.append("popular", String(args.popular)) if (args.sounds != null) query.append("sounds", String(args.sounds)) if (args.taxon_is_active != null) query.append("taxon_is_active", String(args.taxon_is_active)) if (args.threatened != null) query.append("threatened", String(args.threatened)) if (args.verifiable != null) query.append("verifiable", String(args.verifiable)) if (args.id != null) query.append("id", args.id.join(',')) if (args.not_id != null) query.append("not_id", args.not_id.join(',')) if (args.license != null) query.append("license", args.license.join(',')) if (args.photo_license != null) query.append("photo_license", args.photo_license.join(',')) if (args.licensed != null) query.append("licensed", String(args.licensed)) if (args.photo_licensed != null) query.append("photo_licensed", String(args.photo_licensed)) if (args.place_id != null) query.append("place_id", args.place_id.join(',')) if (args.project_id != null) query.append("project_id", args.project_id.join(',')) if (args.coords_viewable_for_proj != null) query.append("coords_viewable_for_proj", String(args.coords_viewable_for_proj)) if (args.rank != null) query.append("rank", args.rank.join(',')) if (args.site_id != null) query.append("site_id", args.site_id.join(',')) if (args.sound_license != null) query.append("sound_license", args.sound_license.join(',')) if (args.taxon_id != null) query.append("taxon_id", args.taxon_id.join(',')) if (args.without_taxon_id != null) query.append("without_taxon_id", args.without_taxon_id.join(',')) if (args.taxon_name != null) query.append("taxon_name", String(args.taxon_name)) if (args.user_id != null) query.append("user_id", args.user_id.join(',')) if (args.user_login != null) query.append("user_login", args.user_login.join(',')) if (args.hour != null) query.append("hour", args.hour.join(',')) if (args.day != null) query.append("day", args.day.join(',')) if (args.month != null) query.append("month", args.month.join(',')) if (args.year != null) query.append("year", args.year.join(',')) if (args.created_day != null) query.append("created_day", args.created_day.join(',')) if (args.created_month != null) query.append("created_month", args.created_month.join(',')) if (args.created_year != null) query.append("created_year", args.created_year.join(',')) if (args.term_id != null) query.append("term_id", args.term_id.join(',')) if (args.term_value_id != null) query.append("term_value_id", args.term_value_id.join(',')) if (args.without_term_value_id != null) query.append("without_term_value_id", args.without_term_value_id.join(',')) if (args.term_id_or_unknown != null) query.append("term_id_or_unknown", args.term_id_or_unknown.join(',')) if (args.annotation_user_id != null) query.append("annotation_user_id", args.annotation_user_id.join(',')) if (args.acc_above != null) query.append("acc_above", String(args.acc_above)) if (args.acc_below != null) query.append("acc_below", String(args.acc_below)) if (args.acc_below_or_unknown != null) query.append("acc_below_or_unknown", String(args.acc_below_or_unknown)) if (args.d1 != null) query.append("d1", String(args.d1)) if (args.d2 != null) query.append("d2", String(args.d2)) if (args.created_d1 != null) query.append("created_d1", String(args.created_d1)) if (args.created_d2 != null) query.append("created_d2", String(args.created_d2)) if (args.created_on != null) query.append("created_on", String(args.created_on)) if (args.observed_on != null) query.append("observed_on", String(args.observed_on)) if (args.unobserved_by_user_id != null) query.append("unobserved_by_user_id", String(args.unobserved_by_user_id)) if (args.apply_project_rules_for != null) query.append("apply_project_rules_for", String(args.apply_project_rules_for)) if (args.observation_accuracy_experiment_id != null) query.append("observation_accuracy_experiment_id", args.observation_accuracy_experiment_id.join(',')) if (args.cs != null) query.append("cs", String(args.cs)) if (args.csa != null) query.append("csa", String(args.csa)) if (args.csi != null) query.append("csi", args.csi.join(',')) if (args.geoprivacy != null) query.append("geoprivacy", args.geoprivacy.join(',')) if (args.taxon_geoprivacy != null) query.append("taxon_geoprivacy", args.taxon_geoprivacy.join(',')) if (args.obscuration != null) query.append("obscuration", args.obscuration.join(',')) if (args.hrank != null) query.append("hrank", args.hrank.join(',')) if (args.lrank != null) query.append("lrank", args.lrank.join(',')) if (args.iconic_taxa != null) query.append("iconic_taxa", args.iconic_taxa.join(',')) if (args.id_above != null) query.append("id_above", String(args.id_above)) if (args.id_below != null) query.append("id_below", String(args.id_below)) if (args.identifications != null) query.append("identifications", String(args.identifications)) if (args.disagreements != null) query.append("disagreements", String(args.disagreements)) if (args.lat != null) query.append("lat", String(args.lat)) if (args.lng != null) query.append("lng", String(args.lng)) if (args.radius != null) query.append("radius", String(args.radius)) if (args.nelat != null) query.append("nelat", String(args.nelat)) if (args.nelng != null) query.append("nelng", String(args.nelng)) if (args.swlat != null) query.append("swlat", String(args.swlat)) if (args.swlng != null) query.append("swlng", String(args.swlng)) if (args.list_id != null) query.append("list_id", String(args.list_id)) if (args.not_in_project != null) query.append("not_in_project", args.not_in_project.join(',')) if (args.not_matching_project_rules_for != null) query.append("not_matching_project_rules_for", String(args.not_matching_project_rules_for)) if (args.q != null) query.append("q", String(args.q)) if (args.search_on != null) query.append("search_on", String(args.search_on)) if (args.quality_grade != null) query.append("quality_grade", args.quality_grade.join(',')) if (args.not_casual_excluding_captive != null) query.append("not_casual_excluding_captive", String(args.not_casual_excluding_captive)) if (args.without_field != null) query.append("without_field", String(args.without_field)) if (args.outlink_source != null) query.append("outlink_source", String(args.outlink_source)) if (args.updated_since != null) query.append("updated_since", String(args.updated_since)) if (args.viewer_id != null) query.append("viewer_id", String(args.viewer_id)) if (args.reviewed != null) query.append("reviewed", String(args.reviewed)) if (args.expected_nearby != null) query.append("expected_nearby", String(args.expected_nearby)) if (args.fails_dqa_accurate != null) query.append("fails_dqa_accurate", String(args.fails_dqa_accurate)) if (args.fails_dqa_date != null) query.append("fails_dqa_date", String(args.fails_dqa_date)) if (args.fails_dqa_evidence != null) query.append("fails_dqa_evidence", String(args.fails_dqa_evidence)) if (args.fails_dqa_location != null) query.append("fails_dqa_location", String(args.fails_dqa_location)) if (args.fails_dqa_needs_id != null) query.append("fails_dqa_needs_id", String(args.fails_dqa_needs_id)) if (args.fails_dqa_recent != null) query.append("fails_dqa_recent", String(args.fails_dqa_recent)) if (args.fails_dqa_subject != null) query.append("fails_dqa_subject", String(args.fails_dqa_subject)) if (args.fails_dqa_wild != null) query.append("fails_dqa_wild", String(args.fails_dqa_wild)) if (args.user_after != null) query.append("user_after", String(args.user_after)) if (args.user_before != null) query.append("user_before", String(args.user_before)) if (args.locale != null) query.append("locale", String(args.locale)) if (args.preferred_place_id != null) query.append("preferred_place_id", String(args.preferred_place_id)) if (args.ttl != null) query.append("ttl", String(args.ttl)) if (args.page != null) query.append("page", String(args.page)) if (args.per_page != null) query.append("per_page", String(args.per_page)) if (args.order != null) query.append("order", String(args.order)) if (args.order_by != null) query.append("order_by", String(args.order_by)) if (args.only_id != null) query.append("only_id", String(args.only_id)) if (args.fields != null) query.append("fields", String(args.fields)) if (args['X-HTTP-Method-Override'] != null) headers.set("X-HTTP-Method-Override", String(args['X-HTTP-Method-Override'])) if (userJwtOptional !== undefined) headers.set("Authorization", userJwtOptional) const url = `${baseUrl.replace(/\/+$/, '')}/observations/umbrella_project_stats${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(resultsObservationsUmbrellaProjectStats, await res.json()) };