spb/datacenterindex
Public
HTML 53.9%
TypeScript 44.5%
JavaScript 0.6%
SQL 0.5%
1import type { CloudRegionDetail as CloudRegionDetailContract, FacilityStatus, FacilitySummary, IxpDetail as IxpDetailContract, SourceRef } from "@dci/core";23/**4 * Response shapes implemented by @dci/api that extend the shared contract in packages/core/src/api-types.ts5 * (see apps/api/README.md and apps/api/src/repositories/*).6 */78/** Contract CloudRegionDetail (hostFacilities / marketFacilities / note / events / provenance) + the legacy fields the API still returns. */9export interface CloudRegionDetail extends CloudRegionDetailContract {10 regionName: string | null;11 countryName: string | null;12 /** legacy alias of marketFacilities */13 facilitiesInMetro: FacilitySummary[];14 updatedAt: string;15}1617/** Contract IxpDetail (facilities / operators / nearbyFacilities / trafficNote) + the extra fields the web reads. */18export interface IxpDetail extends IxpDetailContract {19 countryName: string | null;20 metro: { id: string; slug: string; name: string } | null;21 regionContinent: string | null;22 updatedAt: string;23}2425export interface SourceWithCounts extends SourceRef {26 connectorId: string;27 priority: number;28 robotsAllowed: boolean | null;29 notes: string | null;30 documents: number;31 provenanceRows: number;32 facilities: number;33 lastDocumentAt: string | null;34 updatedAt: string;35}3637export interface SourceDetail extends SourceWithCounts {38 byPageType: Array<{ pageType: string; count: number }>;39 byEntityType: Array<{ entityType: string; count: number }>;40}4142export interface PipelineAggregates {43 byStatus: Array<{ status: FacilityStatus; count: number; mw: number | null; investmentUsd: number | null }>;44 byYear: Array<{ year: string; count: number; mw: number | null }>;45 byCountry: Array<{ countryIso2: string; name: string | null; slug: string | null; count: number; mw: number | null }>;46 totals: { projects: number; plannedMw: number | null; investmentUsd: number | null; ai: number };47}4849export interface SitemapEntry {50 slug: string;51 updatedAt: string;52}5354export const SITEMAP_KINDS = ["facilities", "operators", "countries", "metros", "projects", "cloud-regions"] as const;55export type SitemapKind = (typeof SITEMAP_KINDS)[number];5657/** `meta` returned by the operator / country / metro detail endpoints (facilities paginated with ?fPage). */58export interface DetailFacilitiesMeta {59 facilitiesPage?: number;60 facilitiesPerPage?: number;61 facilitiesTotal?: number;62 methodology?: string;63}64