import type { CloudRegionDetail as CloudRegionDetailContract, FacilityStatus, FacilitySummary, IxpDetail as IxpDetailContract, SourceRef } from "@dci/core"; /** * Response shapes implemented by @dci/api that extend the shared contract in packages/core/src/api-types.ts * (see apps/api/README.md and apps/api/src/repositories/*). */ /** Contract CloudRegionDetail (hostFacilities / marketFacilities / note / events / provenance) + the legacy fields the API still returns. */ export interface CloudRegionDetail extends CloudRegionDetailContract { regionName: string | null; countryName: string | null; /** legacy alias of marketFacilities */ facilitiesInMetro: FacilitySummary[]; updatedAt: string; } /** Contract IxpDetail (facilities / operators / nearbyFacilities / trafficNote) + the extra fields the web reads. */ export interface IxpDetail extends IxpDetailContract { countryName: string | null; metro: { id: string; slug: string; name: string } | null; regionContinent: string | null; updatedAt: string; } export interface SourceWithCounts extends SourceRef { connectorId: string; priority: number; robotsAllowed: boolean | null; notes: string | null; documents: number; provenanceRows: number; facilities: number; lastDocumentAt: string | null; updatedAt: string; } export interface SourceDetail extends SourceWithCounts { byPageType: Array<{ pageType: string; count: number }>; byEntityType: Array<{ entityType: string; count: number }>; } export interface PipelineAggregates { byStatus: Array<{ status: FacilityStatus; count: number; mw: number | null; investmentUsd: number | null }>; byYear: Array<{ year: string; count: number; mw: number | null }>; byCountry: Array<{ countryIso2: string; name: string | null; slug: string | null; count: number; mw: number | null }>; totals: { projects: number; plannedMw: number | null; investmentUsd: number | null; ai: number }; } export interface SitemapEntry { slug: string; updatedAt: string; } export const SITEMAP_KINDS = ["facilities", "operators", "countries", "metros", "projects", "cloud-regions"] as const; export type SitemapKind = (typeof SITEMAP_KINDS)[number]; /** `meta` returned by the operator / country / metro detail endpoints (facilities paginated with ?fPage). */ export interface DetailFacilitiesMeta { facilitiesPage?: number; facilitiesPerPage?: number; facilitiesTotal?: number; methodology?: string; }