simple list of pds servers with open registration

Add version range fallback to detect Cirrus, Cocoon without cron data

+17
+17
backend/routes/pages.ts
··· 396 return m ? m[1] : version; 397 } 398 399 /** Detect software from DB field, version-to-software map, or version string */ 400 function detectSoftwareId( 401 server: PdsServer, ··· 421 for (const sw of PDS_SOFTWARE_REGISTRY) { 422 if (sw.id !== "bluesky-pds" && vLower.startsWith(sw.id)) { 423 return sw.id; 424 } 425 } 426
··· 396 return m ? m[1] : version; 397 } 398 399 + /** Known non-overlapping version ranges for each tracked software */ 400 + const VERSION_RANGES: Array<{ prefix: string; softwareId: string }> = [ 401 + { prefix: "0.4.", softwareId: "bluesky-pds" }, 402 + { prefix: "0.0.", softwareId: "millipds" }, 403 + { prefix: "0.10.", softwareId: "cirrus" }, 404 + { prefix: "0.8.", softwareId: "cocoon" }, 405 + ]; 406 + 407 /** Detect software from DB field, version-to-software map, or version string */ 408 function detectSoftwareId( 409 server: PdsServer, ··· 429 for (const sw of PDS_SOFTWARE_REGISTRY) { 430 if (sw.id !== "bluesky-pds" && vLower.startsWith(sw.id)) { 431 return sw.id; 432 + } 433 + } 434 + 435 + // 5. Match by known version ranges (non-overlapping major.minor prefixes) 436 + if (semver) { 437 + for (const range of VERSION_RANGES) { 438 + if (semver.startsWith(range.prefix)) { 439 + return range.softwareId; 440 + } 441 } 442 } 443