SPB Git forge
38commits 1branches 0releases
338.7 MBsize
maindefault branch
4 h agolast push
HTML 53.9% TypeScript 44.5% JavaScript 0.6% SQL 0.5%
29.8 KB · 238 lines typescript
Raw Blame History
1/**2 * Curated canonical operator names + aliases. Used by operator resolution so that "Interxion", "Telx" and3 * "Digital Realty Trust" all land on one operator record, and to infer kind / cloud / carrier flags.4 * Only naming knowledge lives here — never facility data.5 */6import { normalizeName, type OperatorKind } from "@dci/core";78export interface CanonicalOperator {9  name: string;10  aliases: string[];11  kind: OperatorKind;12  website?: string;13  hqCountryIso2?: string;14  isCloudProvider?: boolean;15  isCarrier?: boolean;16  /** canonical name of the parent group, when the brand is a subsidiary */17  parent?: string;18}1920export const HYPERSCALER_NAMES = ["Amazon Web Services", "Microsoft", "Google", "Meta", "Oracle", "Alibaba Cloud", "Tencent Cloud", "Apple", "IBM", "Huawei Cloud"] as const;2122export const CANONICAL_OPERATORS: CanonicalOperator[] = [23  // Hyperscalers / cloud24  { name: "Amazon Web Services", aliases: ["AWS", "Amazon", "Amazon Data Services", "Amazon.com", "Amazon Web Services, Inc."], kind: "hyperscaler", website: "https://aws.amazon.com", hqCountryIso2: "US", isCloudProvider: true },25  { name: "Microsoft", aliases: ["Microsoft Azure", "Azure", "Microsoft Corporation", "Microsoft Corp"], kind: "hyperscaler", website: "https://azure.microsoft.com", hqCountryIso2: "US", isCloudProvider: true },26  { name: "Google", aliases: ["Google Cloud", "Google Cloud Platform", "GCP", "Google LLC", "Alphabet"], kind: "hyperscaler", website: "https://cloud.google.com", hqCountryIso2: "US", isCloudProvider: true },27  { name: "Meta", aliases: ["Facebook", "Meta Platforms", "Meta Platforms, Inc."], kind: "hyperscaler", website: "https://www.meta.com", hqCountryIso2: "US" },28  { name: "Oracle", aliases: ["Oracle Cloud", "Oracle Cloud Infrastructure", "OCI", "Oracle Corporation"], kind: "hyperscaler", website: "https://www.oracle.com/cloud", hqCountryIso2: "US", isCloudProvider: true },29  { name: "Alibaba Cloud", aliases: ["Aliyun", "Alibaba", "Alibaba Group"], kind: "hyperscaler", website: "https://www.alibabacloud.com", hqCountryIso2: "CN", isCloudProvider: true },30  { name: "Tencent Cloud", aliases: ["Tencent"], kind: "hyperscaler", website: "https://www.tencentcloud.com", hqCountryIso2: "CN", isCloudProvider: true },31  { name: "Huawei Cloud", aliases: ["Huawei", "Huawei Technologies"], kind: "hyperscaler", website: "https://www.huaweicloud.com", hqCountryIso2: "CN", isCloudProvider: true },32  { name: "IBM", aliases: ["IBM Cloud", "International Business Machines", "SoftLayer"], kind: "hyperscaler", website: "https://www.ibm.com/cloud", hqCountryIso2: "US", isCloudProvider: true },33  { name: "Apple", aliases: ["Apple Inc.", "Apple Inc"], kind: "hyperscaler", website: "https://www.apple.com", hqCountryIso2: "US" },34  { name: "OVHcloud", aliases: ["OVH", "OVH Groupe", "OVH SAS"], kind: "cloud", website: "https://www.ovhcloud.com", hqCountryIso2: "FR", isCloudProvider: true },35  { name: "CoreWeave", aliases: ["CoreWeave, Inc."], kind: "cloud", website: "https://www.coreweave.com", hqCountryIso2: "US", isCloudProvider: true },36  { name: "Lambda", aliases: ["Lambda Labs", "Lambda, Inc."], kind: "cloud", website: "https://lambda.ai", hqCountryIso2: "US", isCloudProvider: true },37  { name: "Crusoe", aliases: ["Crusoe Energy", "Crusoe Energy Systems", "Crusoe Cloud"], kind: "developer", website: "https://www.crusoe.ai", hqCountryIso2: "US", isCloudProvider: true },38  { name: "Applied Digital", aliases: ["Applied Digital Corporation", "APLD"], kind: "developer", website: "https://www.applieddigital.com", hqCountryIso2: "US" },39  { name: "Core Scientific", aliases: ["Core Scientific, Inc."], kind: "developer", website: "https://corescientific.com", hqCountryIso2: "US" },40  { name: "Cipher Mining", aliases: ["Cipher Mining Inc."], kind: "developer", website: "https://www.ciphermining.com", hqCountryIso2: "US" },4142  // Global colocation / wholesale43  { name: "Equinix", aliases: ["Equinix Inc.", "Equinix, Inc.", "Equinix Inc", "Equinix Metal", "Packet"], kind: "colocation", website: "https://www.equinix.com", hqCountryIso2: "US" },44  { name: "Digital Realty", aliases: ["Digital Realty Trust", "Digital Realty Trust, Inc.", "DLR", "Interxion", "InterXion", "Telx", "DuPont Fabros", "DuPont Fabros Technology", "DFT", "Teraco Digital Realty"], kind: "colocation", website: "https://www.digitalrealty.com", hqCountryIso2: "US" },45  { name: "NTT Global Data Centers", aliases: ["NTT", "NTT Ltd.", "NTT Ltd", "NTT DATA", "NTT Communications", "RagingWire", "RagingWire Data Centers", "e-shelter", "e-shelter services", "Gyron", "Gyron Internet", "NetMagic", "Netmagic Solutions", "NTT Global Data Centers Americas"], kind: "colocation", website: "https://services.global.ntt", hqCountryIso2: "JP" },46  { name: "Iron Mountain Data Centers", aliases: ["Iron Mountain", "Iron Mountain Incorporated", "IO", "IO Data Centers", "Fortrust"], kind: "colocation", website: "https://www.ironmountain.com/data-centers", hqCountryIso2: "US" },47  { name: "CyrusOne", aliases: ["CyrusOne LLC", "CyrusOne Inc.", "Cyrus One"], kind: "colocation", website: "https://www.cyrusone.com", hqCountryIso2: "US" },48  { name: "QTS", aliases: ["QTS Data Centers", "QTS Realty Trust", "Quality Technology Services"], kind: "colocation", website: "https://www.qtsdatacenters.com", hqCountryIso2: "US" },49  { name: "Vantage Data Centers", aliases: ["Vantage", "Vantage Data Centres", "Etix Everywhere", "Next Generation Data", "NGD"], kind: "colocation", website: "https://vantage-dc.com", hqCountryIso2: "US" },50  { name: "STACK Infrastructure", aliases: ["STACK", "Stack Infrastructure", "STACK EMEA", "Supernap Italia", "Infinity SDC"], kind: "colocation", website: "https://www.stackinfra.com", hqCountryIso2: "US" },51  { name: "CoreSite", aliases: ["CoreSite Realty", "CoreSite (American Tower)", "American Tower CoreSite"], kind: "colocation", website: "https://www.coresite.com", hqCountryIso2: "US", parent: "American Tower" },52  { name: "American Tower", aliases: ["American Tower Corporation", "AMT"], kind: "investor", website: "https://www.americantower.com", hqCountryIso2: "US" },53  { name: "Switch", aliases: ["Switch, Inc.", "Switch Inc", "Switch SUPERNAP", "SUPERNAP"], kind: "colocation", website: "https://www.switch.com", hqCountryIso2: "US" },54  { name: "DataBank", aliases: ["DataBank Holdings", "zColo", "Zayo Colocation", "Edge Presence"], kind: "colocation", website: "https://www.databank.com", hqCountryIso2: "US" },55  { name: "EdgeConneX", aliases: ["Edge ConneX", "EdgeConnex"], kind: "colocation", website: "https://www.edgeconnex.com", hqCountryIso2: "US" },56  { name: "Compass Datacenters", aliases: ["Compass", "Compass Data Centers", "Compass Quantum"], kind: "colocation", website: "https://www.compassdatacenters.com", hqCountryIso2: "US" },57  { name: "Aligned Data Centers", aliases: ["Aligned", "Aligned Energy"], kind: "colocation", website: "https://www.aligneddc.com", hqCountryIso2: "US" },58  { name: "Flexential", aliases: ["Peak 10", "ViaWest", "Peak 10 + ViaWest"], kind: "colocation", website: "https://www.flexential.com", hqCountryIso2: "US" },59  { name: "Cologix", aliases: ["Cologix, Inc.", "COLO-D", "Colo-D", "vXchnge"], kind: "colocation", website: "https://www.cologix.com", hqCountryIso2: "US" },60  { name: "Colt Data Centre Services", aliases: ["Colt DCS", "Colt Data Centres", "Colt Technology Services"], kind: "colocation", website: "https://www.coltdatacentres.net", hqCountryIso2: "GB" },61  { name: "Global Switch", aliases: ["Global Switch Holdings"], kind: "colocation", website: "https://www.globalswitch.com", hqCountryIso2: "GB" },62  { name: "Telehouse", aliases: ["Telehouse International", "KDDI Telehouse", "Telehouse (KDDI)"], kind: "colocation", website: "https://www.telehouse.net", hqCountryIso2: "JP", parent: "KDDI" },63  { name: "KDDI", aliases: ["KDDI Corporation"], kind: "carrier", website: "https://www.kddi.com", hqCountryIso2: "JP", isCarrier: true },64  { name: "AirTrunk", aliases: ["Air Trunk", "AirTrunk Operating"], kind: "colocation", website: "https://airtrunk.com", hqCountryIso2: "AU" },65  { name: "NEXTDC", aliases: ["NextDC", "NEXTDC Limited"], kind: "colocation", website: "https://www.nextdc.com", hqCountryIso2: "AU" },66  { name: "Scala Data Centers", aliases: ["Scala", "Scala Data Center"], kind: "colocation", website: "https://scaladatacenters.com", hqCountryIso2: "BR" },67  { name: "Ascenty", aliases: ["Ascenty Data Centers"], kind: "colocation", website: "https://ascenty.com", hqCountryIso2: "BR", parent: "Digital Realty" },68  { name: "ST Telemedia Global Data Centres", aliases: ["STT GDC", "ST Telemedia", "STT Global Data Centres", "VIRTUS Data Centres", "Virtus", "VIRTUS"], kind: "colocation", website: "https://www.sttelemediagdc.com", hqCountryIso2: "SG" },69  { name: "Princeton Digital Group", aliases: ["PDG"], kind: "colocation", website: "https://www.princetondg.com", hqCountryIso2: "SG" },70  { name: "Yondr", aliases: ["Yondr Group"], kind: "developer", website: "https://www.yondrgroup.com", hqCountryIso2: "GB" },71  { name: "CloudHQ", aliases: ["Cloud HQ", "CloudHQ LLC"], kind: "developer", website: "https://cloudhq.com", hqCountryIso2: "US" },72  { name: "Sabey Data Centers", aliases: ["Sabey", "Sabey Data Center Properties"], kind: "colocation", website: "https://sabeydatacenters.com", hqCountryIso2: "US" },73  { name: "T5 Data Centers", aliases: ["T5", "T5 Data Centres"], kind: "developer", website: "https://t5datacenters.com", hqCountryIso2: "US" },74  { name: "Centersquare", aliases: ["Cyxtera", "Cyxtera Technologies", "Evoque", "Evoque Data Center Solutions", "CenterSquare"], kind: "colocation", website: "https://www.centersquaredc.com", hqCountryIso2: "US" },75  { name: "Element Critical", aliases: ["Element Critical Data Centers"], kind: "colocation", website: "https://elementcritical.com", hqCountryIso2: "US" },76  { name: "Green Mountain", aliases: ["Green Mountain AS", "Green Mountain Data Centers"], kind: "colocation", website: "https://greenmountain.no", hqCountryIso2: "NO" },77  { name: "atNorth", aliases: ["Advania Data Centers", "At North"], kind: "colocation", website: "https://www.atnorth.com", hqCountryIso2: "IS" },78  { name: "Bulk Infrastructure", aliases: ["Bulk", "Bulk Data Centers"], kind: "colocation", website: "https://www.bulkinfrastructure.com", hqCountryIso2: "NO" },79  { name: "Data4", aliases: ["DATA4", "Data4 Group", "DATA4 Group"], kind: "colocation", website: "https://www.data4group.com", hqCountryIso2: "FR" },80  { name: "Digital Edge", aliases: ["Digital Edge DC", "Digital Edge (Singapore)"], kind: "colocation", website: "https://www.digitaledgedc.com", hqCountryIso2: "SG" },81  { name: "Keppel Data Centres", aliases: ["Keppel DC", "Keppel DC REIT", "Keppel Data Centers"], kind: "colocation", website: "https://www.keppeldatacentres.com", hqCountryIso2: "SG" },82  { name: "GDS", aliases: ["GDS Holdings", "GDS Services", "DayOne", "DayOne Data Centers"], kind: "colocation", website: "https://www.gds-services.com", hqCountryIso2: "CN" },83  { name: "VNET", aliases: ["21Vianet", "VNET Group", "21Vianet Group"], kind: "colocation", website: "https://www.vnet.com", hqCountryIso2: "CN" },84  { name: "Chindata", aliases: ["Chindata Group", "Bridge Data Centres", "Bridge DC"], kind: "colocation", website: "https://www.chindatagroup.com", hqCountryIso2: "CN" },85  { name: "Sify Technologies", aliases: ["Sify", "Sify Infinit Spaces"], kind: "colocation", website: "https://www.sifytechnologies.com", hqCountryIso2: "IN" },86  { name: "Nxtra by Airtel", aliases: ["Nxtra", "Nxtra Data", "Airtel Nxtra", "Bharti Airtel Nxtra"], kind: "colocation", website: "https://www.nxtra.in", hqCountryIso2: "IN" },87  { name: "Teraco", aliases: ["Teraco Data Environments"], kind: "colocation", website: "https://www.teraco.co.za", hqCountryIso2: "ZA", parent: "Digital Realty" },88  { name: "Africa Data Centres", aliases: ["Africa Data Centers", "ADC"], kind: "colocation", website: "https://www.africadatacentres.com", hqCountryIso2: "ZA" },89  { name: "ODATA", aliases: ["Odata", "ODATA Colocation"], kind: "colocation", website: "https://odatacolocation.com", hqCountryIso2: "BR", parent: "Aligned Data Centers" },90  { name: "Elea Data Centers", aliases: ["Elea", "Elea Digital"], kind: "colocation", website: "https://eleadatacenters.com", hqCountryIso2: "BR" },91  { name: "Vocus", aliases: ["Vocus Group", "Vocus Communications"], kind: "carrier", website: "https://www.vocus.com.au", hqCountryIso2: "AU", isCarrier: true },92  { name: "Macquarie Data Centres", aliases: ["Macquarie Telecom", "Macquarie Technology Group", "Macquarie Data Centers"], kind: "colocation", website: "https://macquariedatacentres.com", hqCountryIso2: "AU" },93  { name: "Canberra Data Centres", aliases: ["CDC", "CDC Data Centres", "Canberra Data Centers"], kind: "colocation", website: "https://www.cdcdatacentres.com.au", hqCountryIso2: "AU" },94  { name: "Kao Data", aliases: ["Kao Data Campus"], kind: "colocation", website: "https://www.kaodata.com", hqCountryIso2: "GB" },95  { name: "Ark Data Centres", aliases: ["Ark", "Ark Data Centers"], kind: "colocation", website: "https://arkdatacentres.co.uk", hqCountryIso2: "GB" },96  { name: "Pulsant", aliases: ["Pulsant Ltd"], kind: "colocation", website: "https://www.pulsant.com", hqCountryIso2: "GB" },97  { name: "Echelon Data Centres", aliases: ["Echelon", "Echelon DC"], kind: "developer", website: "https://echelon-dc.com", hqCountryIso2: "IE" },98  { name: "Lumen Technologies", aliases: ["Lumen", "CenturyLink", "Level 3", "Level 3 Communications", "Level(3)"], kind: "carrier", website: "https://www.lumen.com", hqCountryIso2: "US", isCarrier: true },99  { name: "Zayo", aliases: ["Zayo Group", "Zayo Group Holdings"], kind: "carrier", website: "https://www.zayo.com", hqCountryIso2: "US", isCarrier: true },100  { name: "TierPoint", aliases: ["Tier Point", "TierPoint LLC"], kind: "colocation", website: "https://www.tierpoint.com", hqCountryIso2: "US" },101  { name: "365 Data Centers", aliases: ["365 Main", "365 Datacenters"], kind: "colocation", website: "https://www.365datacenters.com", hqCountryIso2: "US" },102  { name: "Hivelocity", aliases: ["Hivelocity Inc."], kind: "colocation", website: "https://www.hivelocity.net", hqCountryIso2: "US" },103  { name: "Evocative", aliases: ["Evocative Data Centers", "INAP", "Internap"], kind: "colocation", website: "https://www.evocative.com", hqCountryIso2: "US" },104  { name: "Involta", aliases: ["Involta LLC"], kind: "colocation", website: "https://www.involta.com", hqCountryIso2: "US" },105  { name: "Netrality Data Centers", aliases: ["Netrality", "Netrality Properties"], kind: "colocation", website: "https://netrality.com", hqCountryIso2: "US" },106  { name: "Stream Data Centers", aliases: ["Stream", "Stream Realty Data Centers"], kind: "developer", website: "https://www.streamdatacenters.com", hqCountryIso2: "US" },107  { name: "Skybox Datacenters", aliases: ["Skybox", "Skybox Data Centers"], kind: "developer", website: "https://www.skyboxdatacenters.com", hqCountryIso2: "US" },108  { name: "Prime Data Centers", aliases: ["Prime DC", "Prime Data Centres"], kind: "developer", website: "https://www.primedatacenters.com", hqCountryIso2: "US" },109  { name: "Corscale Data Centers", aliases: ["Corscale", "Patrinely Corscale"], kind: "developer", website: "https://www.corscale.com", hqCountryIso2: "US" },110  { name: "Rowan Digital Infrastructure", aliases: ["Rowan Digital", "Rowan"], kind: "developer", website: "https://www.rowandigital.com", hqCountryIso2: "US" },111  { name: "Telecom Italia Sparkle", aliases: ["TI Sparkle", "Sparkle"], kind: "carrier", website: "https://www.tisparkle.com", hqCountryIso2: "IT", isCarrier: true },112  { name: "Orange", aliases: ["Orange S.A.", "Orange Business", "France Télécom", "France Telecom"], kind: "carrier", website: "https://www.orange.com", hqCountryIso2: "FR", isCarrier: true },113  { name: "Deutsche Telekom", aliases: ["T-Systems", "Telekom"], kind: "carrier", website: "https://www.telekom.com", hqCountryIso2: "DE", isCarrier: true },114  { name: "BT", aliases: ["BT Group", "British Telecom", "British Telecommunications"], kind: "carrier", website: "https://www.bt.com", hqCountryIso2: "GB", isCarrier: true },115  { name: "Verizon", aliases: ["Verizon Business", "Verizon Communications", "MCI"], kind: "carrier", website: "https://www.verizon.com", hqCountryIso2: "US", isCarrier: true },116  { name: "AT&T", aliases: ["AT&T Inc.", "ATT"], kind: "carrier", website: "https://www.att.com", hqCountryIso2: "US", isCarrier: true },117  { name: "Cogent", aliases: ["Cogent Communications"], kind: "carrier", website: "https://www.cogentco.com", hqCountryIso2: "US", isCarrier: true },118  { name: "Arelion", aliases: ["Telia Carrier", "Telia"], kind: "carrier", website: "https://www.arelion.com", hqCountryIso2: "SE", isCarrier: true },119  { name: "GTT", aliases: ["GTT Communications"], kind: "carrier", website: "https://www.gtt.net", hqCountryIso2: "US", isCarrier: true },120  { name: "Tata Communications", aliases: ["Tata"], kind: "carrier", website: "https://www.tatacommunications.com", hqCountryIso2: "IN", isCarrier: true },121  { name: "Singtel", aliases: ["Singapore Telecommunications", "SingTel"], kind: "carrier", website: "https://www.singtel.com", hqCountryIso2: "SG", isCarrier: true },122  { name: "China Telecom", aliases: ["China Telecom Global", "CTG"], kind: "carrier", website: "https://www.chinatelecomglobal.com", hqCountryIso2: "CN", isCarrier: true },123  { name: "Telstra", aliases: ["Telstra Corporation", "Telstra International"], kind: "carrier", website: "https://www.telstra.com", hqCountryIso2: "AU", isCarrier: true },124  { name: "Bell Canada", aliases: ["Bell", "BCE", "Bell Business Markets"], kind: "carrier", website: "https://www.bell.ca", hqCountryIso2: "CA", isCarrier: true },125  { name: "Rogers", aliases: ["Rogers Communications"], kind: "carrier", website: "https://www.rogers.com", hqCountryIso2: "CA", isCarrier: true },126  { name: "TELUS", aliases: ["Telus", "TELUS Communications"], kind: "carrier", website: "https://www.telus.com", hqCountryIso2: "CA", isCarrier: true },127  { name: "eStruxture", aliases: ["eStruxture Data Centers", "Estruxture"], kind: "colocation", website: "https://www.estruxture.com", hqCountryIso2: "CA" },128  { name: "Urbacon Data Centre Solutions", aliases: ["Urbacon", "UDCS"], kind: "colocation", website: "https://www.urbacondcs.com", hqCountryIso2: "CA" },129  { name: "QScale", aliases: ["Q-Scale"], kind: "developer", website: "https://www.qscale.com", hqCountryIso2: "CA" },130  { name: "Hut 8", aliases: ["Hut 8 Corp", "Hut 8 Mining"], kind: "developer", website: "https://hut8.com", hqCountryIso2: "US" },131  { name: "DE-CIX", aliases: ["DE-CIX Group", "DE-CIX Management GmbH"], kind: "ixp_operator", website: "https://www.de-cix.net", hqCountryIso2: "DE" },132  { name: "AMS-IX", aliases: ["Amsterdam Internet Exchange"], kind: "ixp_operator", website: "https://www.ams-ix.net", hqCountryIso2: "NL" },133  { name: "LINX", aliases: ["London Internet Exchange"], kind: "ixp_operator", website: "https://www.linx.net", hqCountryIso2: "GB" },134  { name: "Serverfarm", aliases: ["ServerFarm", "Server Farm Realty"], kind: "colocation", website: "https://www.serverfarmllc.com", hqCountryIso2: "US" },135  { name: "Novva Data Centers", aliases: ["Novva"], kind: "colocation", website: "https://www.novva.com", hqCountryIso2: "US" },136  { name: "PowerHouse Data Centers", aliases: ["PowerHouse", "American Real Estate Partners"], kind: "developer", website: "https://www.powerhousedatacenters.com", hqCountryIso2: "US" },137  { name: "Tract", aliases: ["Tract Capital"], kind: "developer", website: "https://tract.com", hqCountryIso2: "US" },138  { name: "Nscale", aliases: ["NScale"], kind: "developer", website: "https://www.nscale.com", hqCountryIso2: "GB", isCloudProvider: true },139  { name: "Nebius", aliases: ["Nebius Group", "Nebius AI"], kind: "cloud", website: "https://nebius.com", hqCountryIso2: "NL", isCloudProvider: true },140  { name: "Scaleway", aliases: ["Scaleway (Iliad)", "Iliad", "Free Pro", "OpCore"], kind: "cloud", website: "https://www.scaleway.com", hqCountryIso2: "FR", isCloudProvider: true },141  { name: "Hetzner", aliases: ["Hetzner Online"], kind: "cloud", website: "https://www.hetzner.com", hqCountryIso2: "DE", isCloudProvider: true },142  { name: "Cloudflare", aliases: ["Cloudflare, Inc."], kind: "cloud", website: "https://www.cloudflare.com", hqCountryIso2: "US", isCloudProvider: true },143  { name: "Akamai", aliases: ["Akamai Technologies", "Linode"], kind: "cloud", website: "https://www.akamai.com", hqCountryIso2: "US", isCloudProvider: true },144  { name: "DigitalOcean", aliases: ["Digital Ocean"], kind: "cloud", website: "https://www.digitalocean.com", hqCountryIso2: "US", isCloudProvider: true },145  { name: "Vultr", aliases: ["Constant", "The Constant Company"], kind: "cloud", website: "https://www.vultr.com", hqCountryIso2: "US", isCloudProvider: true },146  { name: "Salesforce", aliases: ["Salesforce.com"], kind: "cloud", website: "https://www.salesforce.com", hqCountryIso2: "US", isCloudProvider: true },147  { name: "SAP", aliases: ["SAP SE"], kind: "cloud", website: "https://www.sap.com", hqCountryIso2: "DE", isCloudProvider: true },148  { name: "Baidu AI Cloud", aliases: ["Baidu", "Baidu Cloud"], kind: "cloud", website: "https://intl.cloud.baidu.com", hqCountryIso2: "CN", isCloudProvider: true },149  { name: "Naver Cloud", aliases: ["NAVER Cloud", "Naver"], kind: "cloud", website: "https://www.navercloudcorp.com", hqCountryIso2: "KR", isCloudProvider: true },150  { name: "SK Broadband", aliases: ["SK Telecom", "SKT"], kind: "carrier", website: "https://www.skbroadband.com", hqCountryIso2: "KR", isCarrier: true },151  { name: "KT", aliases: ["KT Corporation", "Korea Telecom", "KT Cloud"], kind: "carrier", website: "https://www.kt.com", hqCountryIso2: "KR", isCarrier: true },152  { name: "Telefónica", aliases: ["Telefonica", "Telxius", "Telefónica Tech"], kind: "carrier", website: "https://www.telefonica.com", hqCountryIso2: "ES", isCarrier: true },153  { name: "Nabiax", aliases: [], kind: "colocation", website: "https://nabiax.com", hqCountryIso2: "ES" },154  { name: "Aruba", aliases: ["Aruba S.p.A.", "Aruba Cloud"], kind: "colocation", website: "https://www.aruba.it", hqCountryIso2: "IT", isCloudProvider: true },155  { name: "maincubes", aliases: ["Maincubes", "maincubes one"], kind: "colocation", website: "https://www.maincubes.com", hqCountryIso2: "DE" },156  { name: "NorthC", aliases: ["NorthC Datacenters", "NorthC Group"], kind: "colocation", website: "https://www.northcdatacenters.com", hqCountryIso2: "NL" },157  { name: "Penta Infra", aliases: ["Penta Infrastructure"], kind: "colocation", website: "https://www.pentainfra.com", hqCountryIso2: "NL" },158  { name: "EcoDataCenter", aliases: ["Eco Data Center", "EcoDC"], kind: "colocation", website: "https://ecodatacenter.tech", hqCountryIso2: "SE" },159  { name: "Verne", aliases: ["Verne Global"], kind: "colocation", website: "https://verneglobal.com", hqCountryIso2: "GB" },160  { name: "Telia (Telia Company)", aliases: ["Telia Company", "Telia Sverige"], kind: "carrier", website: "https://www.teliacompany.com", hqCountryIso2: "SE", isCarrier: true },161  { name: "Khazna Data Centers", aliases: ["Khazna", "Khazna Data Centres"], kind: "colocation", website: "https://www.khazna.com", hqCountryIso2: "AE" },162  { name: "Moro Hub", aliases: ["Moro"], kind: "colocation", website: "https://morohub.com", hqCountryIso2: "AE" },163  { name: "Gulf Data Hub", aliases: ["GDH"], kind: "colocation", website: "https://gulfdatahub.com", hqCountryIso2: "AE" },164  { name: "stc", aliases: ["Saudi Telecom Company", "center3", "Center3", "STC"], kind: "carrier", website: "https://www.stc.com.sa", hqCountryIso2: "SA", isCarrier: true },165  { name: "Ooredoo", aliases: ["Ooredoo Group", "MEEZA"], kind: "carrier", website: "https://www.ooredoo.com", hqCountryIso2: "QA", isCarrier: true },166  { name: "Rack Centre", aliases: ["Rack Center"], kind: "colocation", website: "https://www.rack-centre.com", hqCountryIso2: "NG" },167  { name: "MainOne", aliases: ["Main One", "MDXi"], kind: "colocation", website: "https://www.mainone.net", hqCountryIso2: "NG", parent: "Equinix" },168  { name: "Raxio", aliases: ["Raxio Group", "Raxio Data Centres"], kind: "colocation", website: "https://raxiogroup.com", hqCountryIso2: "UG" },169  { name: "iXAfrica", aliases: ["IX Africa", "iXAfrica Data Centre"], kind: "colocation", website: "https://ixafrica.com", hqCountryIso2: "KE" },170  { name: "KIO", aliases: ["KIO Networks", "KIO Data Centers"], kind: "colocation", website: "https://www.kio.tech", hqCountryIso2: "MX" },171  { name: "Cirion Technologies", aliases: ["Cirion", "Lumen LatAm"], kind: "colocation", website: "https://www.ciriontechnologies.com", hqCountryIso2: "UY" },172  { name: "HostDime", aliases: [], kind: "colocation", website: "https://www.hostdime.com", hqCountryIso2: "US" },173  { name: "Tecto Data Centers", aliases: ["Tecto", "Takoda"], kind: "colocation", website: "https://tecto.com.br", hqCountryIso2: "BR" },174  { name: "SpaceDC", aliases: ["Space DC"], kind: "colocation", website: "https://www.spacedc.com", hqCountryIso2: "SG" },175  { name: "ESR", aliases: ["ESR Group", "ESR Data Centres"], kind: "developer", website: "https://www.esr.com", hqCountryIso2: "HK" },176  { name: "SUNeVision", aliases: ["SUNeVision iAdvantage", "iAdvantage"], kind: "colocation", website: "https://www.sunevision.com", hqCountryIso2: "HK" },177  { name: "PCCW", aliases: ["PCCW Solutions", "HKT"], kind: "carrier", website: "https://www.pccw.com", hqCountryIso2: "HK", isCarrier: true },178  { name: "Chief Telecom", aliases: ["Chief", "Chief Telecom Inc."], kind: "colocation", website: "https://www.chief.com.tw", hqCountryIso2: "TW" },179  { name: "Chunghwa Telecom", aliases: ["CHT"], kind: "carrier", website: "https://www.cht.com.tw", hqCountryIso2: "TW", isCarrier: true },180  { name: "SoftBank", aliases: ["SoftBank Corp.", "IDC Frontier"], kind: "carrier", website: "https://www.softbank.jp", hqCountryIso2: "JP", isCarrier: true },181  { name: "AdaniConneX", aliases: ["Adani ConneX", "Adani Enterprises Data Centers"], kind: "colocation", website: "https://www.adaniconnex.com", hqCountryIso2: "IN" },182  { name: "Yotta", aliases: ["Yotta Data Services", "Yotta Infrastructure"], kind: "colocation", website: "https://yotta.com", hqCountryIso2: "IN" },183  { name: "CtrlS", aliases: ["CtrlS Datacenters", "Ctrl S"], kind: "colocation", website: "https://www.ctrls.in", hqCountryIso2: "IN" },184  { name: "Reliance Jio", aliases: ["Jio", "Jio Platforms", "Reliance"], kind: "carrier", website: "https://www.jio.com", hqCountryIso2: "IN", isCarrier: true },185  { name: "Telkom Indonesia", aliases: ["Telkom", "Telin", "NeutraDC"], kind: "carrier", website: "https://www.telkom.co.id", hqCountryIso2: "ID", isCarrier: true },186  { name: "TM ONE", aliases: ["Telekom Malaysia", "TM"], kind: "carrier", website: "https://www.tm.com.my", hqCountryIso2: "MY", isCarrier: true },187  { name: "YTL Data Center", aliases: ["YTL", "YTL Power", "YTL Data Center Holdings"], kind: "developer", website: "https://www.ytlpowerinternational.com", hqCountryIso2: "MY" },188  { name: "Datacom", aliases: ["Datacom Group"], kind: "colocation", website: "https://datacom.com", hqCountryIso2: "NZ" },189  { name: "Spark New Zealand", aliases: ["Spark", "Spark NZ", "Revera"], kind: "carrier", website: "https://www.spark.co.nz", hqCountryIso2: "NZ", isCarrier: true },190  { name: "Rostelecom", aliases: ["Rostelecom Data Centers", "Ростелеком"], kind: "carrier", website: "https://www.rt.ru", hqCountryIso2: "RU", isCarrier: true },191  { name: "Turkcell", aliases: ["Turkcell Data Center"], kind: "carrier", website: "https://www.turkcell.com.tr", hqCountryIso2: "TR", isCarrier: true },192  { name: "Türk Telekom", aliases: ["Turk Telekom"], kind: "carrier", website: "https://www.turktelekom.com.tr", hqCountryIso2: "TR", isCarrier: true },193  { name: "Lamda Hellix", aliases: ["Lamda Hellix (Digital Realty)"], kind: "colocation", website: "https://www.lamdahellix.com", hqCountryIso2: "GR", parent: "Digital Realty" },194  { name: "Atman", aliases: ["ATM S.A.", "Atman Data Centers"], kind: "colocation", website: "https://www.atman.pl", hqCountryIso2: "PL" },195  { name: "Beyond.pl", aliases: ["Beyond"], kind: "colocation", website: "https://www.beyond.pl", hqCountryIso2: "PL" },196  { name: "Green Datacenter", aliases: ["Green", "green.ch", "Green Datacenter AG"], kind: "colocation", website: "https://www.green.ch", hqCountryIso2: "CH" },197  { name: "Swisscom", aliases: ["Swisscom AG"], kind: "carrier", website: "https://www.swisscom.ch", hqCountryIso2: "CH", isCarrier: true },198  { name: "Proximus", aliases: ["Belgacom"], kind: "carrier", website: "https://www.proximus.com", hqCountryIso2: "BE", isCarrier: true },199  { name: "LuxConnect", aliases: ["Lux Connect"], kind: "colocation", website: "https://www.luxconnect.lu", hqCountryIso2: "LU" },200  { name: "EBRC", aliases: ["European Business Reliance Centre"], kind: "colocation", website: "https://www.ebrc.com", hqCountryIso2: "LU" },201];202203/** Quick set of hyperscaler canonical names (kind inference + is_hyperscale hints). */204export const HYPERSCALERS: ReadonlySet<string> = new Set<string>(HYPERSCALER_NAMES);205206const byNorm = new Map<string, CanonicalOperator>();207for (const c of CANONICAL_OPERATORS) {208  const n = normalizeName(c.name);209  if (n && !byNorm.has(n)) byNorm.set(n, c);210  for (const a of c.aliases) {211    const an = normalizeName(a);212    if (an && !byNorm.has(an)) byNorm.set(an, c);213  }214}215216/** Resolve a raw operator name to its curated canonical entry (by canonical name or alias), or null. */217export function findCanonicalOperator(name: string | null | undefined): CanonicalOperator | null {218  if (!name) return null;219  const n = normalizeName(name);220  if (!n) return null;221  const direct = byNorm.get(n);222  if (direct) return direct;223  // "Equinix Inc." → normalizeName drops "inc" already; also try the raw lowercase (aliases like "AT&T" lose '&')224  const raw = name.trim().toLowerCase();225  for (const c of CANONICAL_OPERATORS) {226    if (c.name.toLowerCase() === raw) return c;227    if (c.aliases.some((a) => a.toLowerCase() === raw)) return c;228  }229  return null;230}231232export function isHyperscalerName(name: string | null | undefined): boolean {233  const c = findCanonicalOperator(name);234  return !!c && HYPERSCALERS.has(c.name);235}236237export const CANONICAL_OPERATOR_COUNT = CANONICAL_OPERATORS.length;238