spb/internetpressure
Public
TypeScript 36.3%
Python 31.8%
Go 18%
JavaScript 9.8%
Shell 1.9%
SQL 1.4%
CSS 0.5%
1import type { MetadataRoute } from 'next';2import { apiTry } from '@/lib/api';3import { SITE_URL } from '@/lib/site';4import type { AsnRow, Country, HistorySummary, IncidentList, Region, ServiceRow } from '@/lib/types';56export const dynamic = 'force-dynamic';78export default async function sitemap(): Promise<MetadataRoute.Sitemap> {9 const [countries, regions, asns, services, incidents, history] = await Promise.all([10 apiTry<{ countries: Country[] }>('/api/v1/pressure/countries'),11 apiTry<{ regions: Region[] }>('/api/v1/pressure/regions'),12 apiTry<{ asns: AsnRow[] }>('/api/v1/asns'),13 apiTry<{ services: ServiceRow[] }>('/api/v1/services'),14 apiTry<IncidentList>('/api/v1/incidents?status=all&limit=500'),15 apiTry<HistorySummary>('/api/v1/history/summary'),16 ]);17 const now = new Date();18 const u = (p: string, priority = 0.6, changeFrequency: MetadataRoute.Sitemap[number]['changeFrequency'] = 'hourly'): MetadataRoute.Sitemap[number] => ({ url: `${SITE_URL}${p}`, lastModified: now, changeFrequency, priority });19 const out: MetadataRoute.Sitemap = [20 u('/', 1, 'always'),21 ...['/incidents', '/services', '/asns', '/routes', '/bgp', '/probes', '/targets', '/history'].map((p) => u(p, 0.7)),22 u('/methodology', 0.5, 'monthly'),23 u('/api', 0.5, 'monthly'),24 ];25 for (const c of countries?.countries ?? []) out.push(u(`/country/${c.cc.toLowerCase()}`, 0.8));26 for (const r of regions?.regions ?? []) out.push(u(`/internet/${r.id}`, 0.7));27 for (const a of asns?.asns ?? []) out.push(u(`/asn/${a.asn}`, 0.6));28 for (const s of services?.services ?? []) out.push(u(`/service/${s.slug}`, 0.7));29 for (const i of incidents?.incidents ?? []) out.push(u(`/event/${i.slug}`, 0.6, i.status === 'resolved' ? 'yearly' : 'hourly'));30 for (const m of history?.available_months ?? []) {31 const [y, mo] = m.split('-');32 if (y) out.push(u(`/history/${y}`, 0.5, 'weekly'));33 if (y && mo) out.push(u(`/history/${y}/${Number(mo)}`, 0.5, 'weekly'));34 }35 return out;36}37