import {z} from 'zod' export type WikiBatchLinkEntityRequest = {entities: Array, entity_types?: (Array | null) | undefined, entity_descriptions?: (Array | null) | undefined, n_candidates?: number | undefined, relevance_threshold?: number | undefined, ambiguity_margin?: number | undefined, allow_ambiguous?: boolean | undefined, include_candidates?: boolean | undefined}; export type CreateApiV1WikiLinkEntityBatchArgs = {body: WikiBatchLinkEntityRequest}; export type CreateApiV1WikiLinkEntityBatchOptions = {baseUrl?: string | undefined, APIKey?: string | undefined, fetch?: typeof fetch | undefined}; export const wikidataQidRef = z.object({qid: z.string(), label: z.string(), start_time: z.string().nullable().optional(), end_time: z.string().nullable().optional(), point_in_time: z.string().nullable().optional(), rank: z.string().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const wikidataQuantity = z.object({amount: z.number(), unit_qid: z.string().nullable().optional(), unit_label: z.string().nullable().optional(), platform: z.string().nullable().optional(), account_id: z.string().nullable().optional(), point_in_time: z.string().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const wikidataMonolingualText = z.object({text: z.string(), language: z.string().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const wikidataCoordinate = z.object({latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const wikidataMetadata = z.object({wikipedia_titles: z.record(z.string(), z.string()).nullable().optional(), sitelink_count: z.number().int().nullable().optional(), alt_labels: z.record(z.string(), z.string()).nullable().optional(), aliases: z.array(z.string()).nullable().optional(), official_website_domain: z.string().nullable().optional(), lastrevid: z.number().int().nullable().optional(), last_modified: z.string().nullable().optional(), is_class: z.boolean().nullable().optional(), instance_of: z.array(wikidataQidRef).nullable().optional(), subclass_of: z.array(wikidataQidRef).nullable().optional(), spouse: z.array(wikidataQidRef).nullable().optional(), child: z.array(wikidataQidRef).nullable().optional(), sibling: z.array(wikidataQidRef).nullable().optional(), relative: z.array(wikidataQidRef).nullable().optional(), student_of: z.array(wikidataQidRef).nullable().optional(), doctoral_advisor: z.array(wikidataQidRef).nullable().optional(), country_of_citizenship: z.array(wikidataQidRef).nullable().optional(), gender: z.array(wikidataQidRef).nullable().optional(), occupation: z.array(wikidataQidRef).nullable().optional(), academic_degree: z.array(wikidataQidRef).nullable().optional(), noble_title: z.array(wikidataQidRef).nullable().optional(), medical_condition: z.array(wikidataQidRef).nullable().optional(), employer: z.array(wikidataQidRef).nullable().optional(), educated_at: z.array(wikidataQidRef).nullable().optional(), position_held: z.array(wikidataQidRef).nullable().optional(), member_of: z.array(wikidataQidRef).nullable().optional(), awards: z.array(wikidataQidRef).nullable().optional(), notable_work: z.array(wikidataQidRef).nullable().optional(), field_of_work: z.array(wikidataQidRef).nullable().optional(), political_party: z.array(wikidataQidRef).nullable().optional(), religion: z.array(wikidataQidRef).nullable().optional(), native_language: z.array(wikidataQidRef).nullable().optional(), cause_of_death: z.array(wikidataQidRef).nullable().optional(), legislative_body: z.array(wikidataQidRef).nullable().optional(), electoral_district: z.array(wikidataQidRef).nullable().optional(), candidacy_in_election: z.array(wikidataQidRef).nullable().optional(), appointed_by: z.array(wikidataQidRef).nullable().optional(), replaced_by: z.array(wikidataQidRef).nullable().optional(), replaces: z.array(wikidataQidRef).nullable().optional(), diplomatic_relation: z.array(wikidataQidRef).nullable().optional(), executive_body: z.array(wikidataQidRef).nullable().optional(), judicial_branch: z.array(wikidataQidRef).nullable().optional(), flag: z.array(wikidataQidRef).nullable().optional(), territory_claimed_by: z.array(wikidataQidRef).nullable().optional(), political_alignment: z.array(wikidataQidRef).nullable().optional(), political_ideology: z.array(wikidataQidRef).nullable().optional(), headquarters: z.array(wikidataQidRef).nullable().optional(), ceo: z.array(wikidataQidRef).nullable().optional(), chief_operating_officer: z.array(wikidataQidRef).nullable().optional(), founded_by: z.array(wikidataQidRef).nullable().optional(), parent_organization: z.array(wikidataQidRef).nullable().optional(), industry: z.array(wikidataQidRef).nullable().optional(), stock_exchange: z.array(wikidataQidRef).nullable().optional(), legal_form: z.array(wikidataQidRef).nullable().optional(), owned_by: z.array(wikidataQidRef).nullable().optional(), subsidiary: z.array(wikidataQidRef).nullable().optional(), chairperson: z.array(wikidataQidRef).nullable().optional(), board_member: z.array(wikidataQidRef).nullable().optional(), merged_into: z.array(wikidataQidRef).nullable().optional(), partnership_with: z.array(wikidataQidRef).nullable().optional(), beneficial_owner: z.array(wikidataQidRef).nullable().optional(), significant_person: z.array(wikidataQidRef).nullable().optional(), country: z.array(wikidataQidRef).nullable().optional(), located_in: z.array(wikidataQidRef).nullable().optional(), capital: z.array(wikidataQidRef).nullable().optional(), official_language: z.array(wikidataQidRef).nullable().optional(), basic_form_of_government: z.array(wikidataQidRef).nullable().optional(), language_used: z.array(wikidataQidRef).nullable().optional(), head_of_government: z.array(wikidataQidRef).nullable().optional(), head_of_state: z.array(wikidataQidRef).nullable().optional(), part_of: z.array(wikidataQidRef).nullable().optional(), author: z.array(wikidataQidRef).nullable().optional(), director: z.array(wikidataQidRef).nullable().optional(), genre: z.array(wikidataQidRef).nullable().optional(), cast_member: z.array(wikidataQidRef).nullable().optional(), original_language: z.array(wikidataQidRef).nullable().optional(), crew: z.array(wikidataQidRef).nullable().optional(), operator: z.array(wikidataQidRef).nullable().optional(), launch_vehicle: z.array(wikidataQidRef).nullable().optional(), manufacturer: z.array(wikidataQidRef).nullable().optional(), brand: z.array(wikidataQidRef).nullable().optional(), product_or_material_produced: z.array(wikidataQidRef).nullable().optional(), part_of_series: z.array(wikidataQidRef).nullable().optional(), developer: z.array(wikidataQidRef).nullable().optional(), platform: z.array(wikidataQidRef).nullable().optional(), material_used: z.array(wikidataQidRef).nullable().optional(), operating_system: z.array(wikidataQidRef).nullable().optional(), license: z.array(wikidataQidRef).nullable().optional(), cpu: z.array(wikidataQidRef).nullable().optional(), gpu: z.array(wikidataQidRef).nullable().optional(), director_manager: z.array(wikidataQidRef).nullable().optional(), sponsor: z.array(wikidataQidRef).nullable().optional(), participant_in: z.array(wikidataQidRef).nullable().optional(), significant_event: z.array(wikidataQidRef).nullable().optional(), sport: z.array(wikidataQidRef).nullable().optional(), league: z.array(wikidataQidRef).nullable().optional(), member_of_sports_team: z.array(wikidataQidRef).nullable().optional(), coach: z.array(wikidataQidRef).nullable().optional(), sports_season: z.array(wikidataQidRef).nullable().optional(), winner: z.array(wikidataQidRef).nullable().optional(), participant: z.array(wikidataQidRef).nullable().optional(), country_of_origin: z.array(wikidataQidRef).nullable().optional(), conflict: z.array(wikidataQidRef).nullable().optional(), ethnic_group: z.array(wikidataQidRef).nullable().optional(), currency: z.array(wikidataQidRef).nullable().optional(), convicted_of: z.array(wikidataQidRef).nullable().optional(), penalty: z.array(wikidataQidRef).nullable().optional(), charge: z.array(wikidataQidRef).nullable().optional(), victim: z.array(wikidataQidRef).nullable().optional(), perpetrator: z.array(wikidataQidRef).nullable().optional(), jurisdiction: z.array(wikidataQidRef).nullable().optional(), investigated_by: z.array(wikidataQidRef).nullable().optional(), discoverer_or_inventor: z.array(wikidataQidRef).nullable().optional(), location_of_discovery: z.array(wikidataQidRef).nullable().optional(), approved_by: z.array(wikidataQidRef).nullable().optional(), military_branch: z.array(wikidataQidRef).nullable().optional(), military_rank: z.array(wikidataQidRef).nullable().optional(), armament: z.array(wikidataQidRef).nullable().optional(), commanded_by: z.array(wikidataQidRef).nullable().optional(), military_unit: z.array(wikidataQidRef).nullable().optional(), producer: z.array(wikidataQidRef).nullable().optional(), screenwriter: z.array(wikidataQidRef).nullable().optional(), composer: z.array(wikidataQidRef).nullable().optional(), performer: z.array(wikidataQidRef).nullable().optional(), record_label: z.array(wikidataQidRef).nullable().optional(), distributor: z.array(wikidataQidRef).nullable().optional(), production_company: z.array(wikidataQidRef).nullable().optional(), collection: z.array(wikidataQidRef).nullable().optional(), creator: z.array(wikidataQidRef).nullable().optional(), iucn_conservation_status: z.array(wikidataQidRef).nullable().optional(), climate_classification: z.array(wikidataQidRef).nullable().optional(), source_of_energy: z.array(wikidataQidRef).nullable().optional(), seismic_classification: z.array(wikidataQidRef).nullable().optional(), named_after: z.array(wikidataQidRef).nullable().optional(), different_from: z.array(wikidataQidRef).nullable().optional(), has_parts: z.array(wikidataQidRef).nullable().optional(), follows: z.array(wikidataQidRef).nullable().optional(), followed_by: z.array(wikidataQidRef).nullable().optional(), place_of_birth: wikidataQidRef.nullable().optional(), place_of_death: wikidataQidRef.nullable().optional(), social_media_followers: z.array(wikidataQuantity).nullable().optional(), number_of_subscribers: z.array(wikidataQuantity).nullable().optional(), number_of_employees: z.array(wikidataQuantity).nullable().optional(), total_revenue: z.array(wikidataQuantity).nullable().optional(), total_assets: z.array(wikidataQuantity).nullable().optional(), population: z.array(wikidataQuantity).nullable().optional(), payload_mass: z.array(wikidataQuantity).nullable().optional(), mass: z.array(wikidataQuantity).nullable().optional(), battery_capacity: z.array(wikidataQuantity).nullable().optional(), data_transfer_speed: z.array(wikidataQuantity).nullable().optional(), frequency: z.array(wikidataQuantity).nullable().optional(), number_of_processor_cores: z.array(wikidataQuantity).nullable().optional(), storage_capacity: z.array(wikidataQuantity).nullable().optional(), engine_displacement: z.array(wikidataQuantity).nullable().optional(), wheelbase: z.array(wikidataQuantity).nullable().optional(), width: z.array(wikidataQuantity).nullable().optional(), height: z.array(wikidataQuantity).nullable().optional(), length: z.array(wikidataQuantity).nullable().optional(), speed: z.array(wikidataQuantity).nullable().optional(), torque: z.array(wikidataQuantity).nullable().optional(), power: z.array(wikidataQuantity).nullable().optional(), duration: z.array(wikidataQuantity).nullable().optional(), richter_magnitude: z.array(wikidataQuantity).nullable().optional(), number_of_deaths: z.array(wikidataQuantity).nullable().optional(), number_of_casualties: z.array(wikidataQuantity).nullable().optional(), number_of_injured: z.array(wikidataQuantity).nullable().optional(), range: z.array(wikidataQuantity).nullable().optional(), number_produced: z.array(wikidataQuantity).nullable().optional(), box_office: z.array(wikidataQuantity).nullable().optional(), budget: z.array(wikidataQuantity).nullable().optional(), carbon_footprint: z.array(wikidataQuantity).nullable().optional(), date_of_birth: z.string().nullable().optional(), date_of_death: z.string().nullable().optional(), dissolved: z.string().nullable().optional(), inception: z.string().nullable().optional(), date_of_official_opening: z.string().nullable().optional(), publication_date: z.array(z.string()).nullable().optional(), launch_date: z.array(z.string()).nullable().optional(), time_of_discovery: z.array(z.string()).nullable().optional(), service_entry: z.array(z.string()).nullable().optional(), service_retirement: z.array(z.string()).nullable().optional(), short_name: z.array(wikidataMonolingualText).nullable().optional(), nickname: z.array(wikidataMonolingualText).nullable().optional(), native_label: z.array(wikidataMonolingualText).nullable().optional(), name_in_native_language: z.array(wikidataMonolingualText).nullable().optional(), official_name: z.array(wikidataMonolingualText).nullable().optional(), x_twitter_username: z.array(z.string()).nullable().optional(), facebook_id: z.array(z.string()).nullable().optional(), instagram_username: z.array(z.string()).nullable().optional(), youtube_channel_id: z.array(z.string()).nullable().optional(), linkedin_company_or_organization_id: z.array(z.string()).nullable().optional(), linkedin_personal_profile_id: z.array(z.string()).nullable().optional(), telegram_username: z.array(z.string()).nullable().optional(), tiktok_username: z.array(z.string()).nullable().optional(), youtube_handle: z.array(z.string()).nullable().optional(), mastodon_address: z.array(z.string()).nullable().optional(), threads_username: z.array(z.string()).nullable().optional(), vk_username: z.array(z.string()).nullable().optional(), weibo_user_id: z.array(z.string()).nullable().optional(), bluesky_handle: z.array(z.string()).nullable().optional(), pinterest_username: z.array(z.string()).nullable().optional(), twitch_username: z.array(z.string()).nullable().optional(), tumblr_username: z.array(z.string()).nullable().optional(), snapchat_username: z.array(z.string()).nullable().optional(), reddit_username: z.array(z.string()).nullable().optional(), bilibili_uid: z.array(z.string()).nullable().optional(), discord_server_numeric_id: z.array(z.string()).nullable().optional(), whatsapp_channel_id: z.array(z.string()).nullable().optional(), wechat_id: z.array(z.string()).nullable().optional(), truth_social_username: z.array(z.string()).nullable().optional(), quora_username: z.array(z.string()).nullable().optional(), douyin_username: z.array(z.string()).nullable().optional(), gab_username: z.array(z.string()).nullable().optional(), rednote_profile_id: z.array(z.string()).nullable().optional(), rumble_channel: z.array(z.string()).nullable().optional(), discord_username: z.array(z.string()).nullable().optional(), subreddit: z.array(z.string()).nullable().optional(), viaf_cluster_id: z.array(z.string()).nullable().optional(), isni: z.array(z.string()).nullable().optional(), gnd_id: z.array(z.string()).nullable().optional(), library_of_congress_authorities_id: z.array(z.string()).nullable().optional(), idref_id: z.array(z.string()).nullable().optional(), grid_id: z.array(z.string()).nullable().optional(), sec_cik: z.array(z.string()).nullable().optional(), duns_number: z.array(z.string()).nullable().optional(), opensanctions_id: z.array(z.string()).nullable().optional(), isin: z.array(z.string()).nullable().optional(), lei_code: z.array(z.string()).nullable().optional(), swift_bic_code: z.array(z.string()).nullable().optional(), imdb_id: z.array(z.string()).nullable().optional(), official_website: z.string().nullable().optional(), image: z.array(z.string()).nullable().optional(), coordinates: wikidataCoordinate.nullable().optional(), ticker_symbol: z.array(z.string()).nullable().optional(), version: z.array(z.string()).nullable().optional()}); export const wikidataResponseDictItem = z.object({title: z.string(), description: z.string().nullable().optional(), qid: z.string(), relevance: z.number().nullable().optional(), wikidata_metadata: wikidataMetadata.nullable().optional()}); export const wikiLinkEntityResponse = z.object({entity: z.string(), entity_type: z.string().nullable().optional(), linked_entity: wikidataResponseDictItem.nullable().optional(), candidates: z.array(wikidataResponseDictItem).nullable().optional(), relevance_threshold: z.number().nullable().optional(), link_status: z.enum(["linked", "ambiguous", "no_match"]), link_confidence: z.number()}); export const wikiBatchLinkEntityResponse = z.object({results: z.array(wikiLinkEntityResponse)}); 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 }; /** * Batch link entities to Wikidata entities * * POST /v1/wiki/link-entity/batch */ export const createApiV1WikiLinkEntityBatch = async (args: CreateApiV1WikiLinkEntityBatchArgs, options?: CreateApiV1WikiLinkEntityBatchOptions) => { const {baseUrl = "https://api.asknews.app", fetch: fetchFn = fetch, APIKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (APIKey !== undefined) headers.set("Authorization", APIKey) const url = `${baseUrl.replace(/\/+$/, '')}/v1/wiki/link-entity/batch${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(wikiBatchLinkEntityResponse, await res.json()) };