SPB Git forge
15commits 1branches 0releases
29.7 MBsize
maindefault branch
10 days agolast push
TypeScript 36.3% Python 31.8% Go 18% JavaScript 9.8% Shell 1.9% SQL 1.4% CSS 0.5%
2.0 KB · 37 lines typescript
Raw Blame History
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