Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
21 kB ยท 698 lines
TypeScript
at incident-api
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699import { expect } from "@std/expect";import { describe, test } from "@std/testing/bdd";
import { resolveRoute } from "./resolve-route";
describe("resolveRoute", () => { describe("hostname routing (subdomain)", () => { test("acme.localhost:3000/ โ /acme/en (default locale)", () => { const result = resolveRoute({ host: "acme.localhost:3000", urlHost: "localhost:3000", pathname: "/", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "en", localeExplicit: false, rewritePath: "/acme/en", }); });
test("acme.localhost:3000/en โ /acme/en", () => { const result = resolveRoute({ host: "acme.localhost:3000", urlHost: "localhost:3000", pathname: "/en", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "en", localeExplicit: true, rewritePath: "/acme/en", }); });
test("acme.localhost:3000/fr โ /acme/fr", () => { const result = resolveRoute({ host: "acme.localhost:3000", urlHost: "localhost:3000", pathname: "/fr", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "fr", localeExplicit: true, rewritePath: "/acme/fr", }); });
test("acme.localhost:3000/fr/events โ /acme/fr/events", () => { const result = resolveRoute({ host: "acme.localhost:3000", urlHost: "localhost:3000", pathname: "/fr/events", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "fr", localeExplicit: true, rewritePath: "/acme/fr/events", }); });
test("acme.localhost:3000/events โ /acme/en/events (no locale defaults to en)", () => { const result = resolveRoute({ host: "acme.localhost:3000", urlHost: "localhost:3000", pathname: "/events", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "en", localeExplicit: false, rewritePath: "/acme/en/events", }); });
test("acme.localhost:3000/en/monitors/123 โ /acme/en/monitors/123", () => { const result = resolveRoute({ host: "acme.localhost:3000", urlHost: "localhost:3000", pathname: "/en/monitors/123", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "en", localeExplicit: true, rewritePath: "/acme/en/monitors/123", }); }); });
describe("pathname routing (path-based)", () => { test("localhost:3000/acme/en โ /acme/en", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/acme/en", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "en", localeExplicit: true, rewritePath: "/acme/en", }); });
test("localhost:3000/acme/fr โ /acme/fr", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/acme/fr", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "fr", localeExplicit: true, rewritePath: "/acme/fr", }); });
test("localhost:3000/acme โ /acme/en (default locale inserted)", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/acme", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "en", localeExplicit: false, rewritePath: "/acme/en", }); });
test("localhost:3000/acme/en/events โ /acme/en/events", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/acme/en/events", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "en", localeExplicit: true, rewritePath: "/acme/en/events", }); });
test("localhost:3000/acme/fr/monitors/123 โ /acme/fr/monitors/123", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/acme/fr/monitors/123", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "fr", localeExplicit: true, rewritePath: "/acme/fr/monitors/123", }); });
test("localhost:3000/acme/events โ /acme/en/events (non-locale segment, default locale inserted)", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/acme/events", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "en", localeExplicit: false, rewritePath: "/acme/en/events", }); }); });
// Seed page 1: slug "status", customDomain "" describe('hostname routing โ slug "status" (subdomain only, no custom domain)', () => { test("status.localhost:3000/ โ /status/en", () => { const result = resolveRoute({ host: "status.localhost:3000", urlHost: "localhost:3000", pathname: "/", }); expect(result).toEqual({ type: "hostname", prefix: "status", locale: "en", localeExplicit: false, rewritePath: "/status/en", }); });
test("status.localhost:3000/fr โ /status/fr", () => { const result = resolveRoute({ host: "status.localhost:3000", urlHost: "localhost:3000", pathname: "/fr", }); expect(result).toEqual({ type: "hostname", prefix: "status", locale: "fr", localeExplicit: true, rewritePath: "/status/fr", }); });
test("status.localhost:3000/events โ /status/en/events (default locale)", () => { const result = resolveRoute({ host: "status.localhost:3000", urlHost: "localhost:3000", pathname: "/events", }); expect(result).toEqual({ type: "hostname", prefix: "status", locale: "en", localeExplicit: false, rewritePath: "/status/en/events", }); });
test("status.localhost:3000/fr/monitors/1 โ /status/fr/monitors/1", () => { const result = resolveRoute({ host: "status.localhost:3000", urlHost: "localhost:3000", pathname: "/fr/monitors/1", }); expect(result).toEqual({ type: "hostname", prefix: "status", locale: "fr", localeExplicit: true, rewritePath: "/status/fr/monitors/1", }); }); });
describe('pathname routing โ slug "status"', () => { test("localhost:3000/status โ /status/en", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/status", }); expect(result).toEqual({ type: "pathname", prefix: "status", locale: "en", localeExplicit: false, rewritePath: "/status/en", }); });
test("localhost:3000/status/en โ /status/en", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/status/en", }); expect(result).toEqual({ type: "pathname", prefix: "status", locale: "en", localeExplicit: true, rewritePath: "/status/en", }); });
test("localhost:3000/status/fr/events โ /status/fr/events", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/status/fr/events", }); expect(result).toEqual({ type: "pathname", prefix: "status", locale: "fr", localeExplicit: true, rewritePath: "/status/fr/events", }); }); });
// Seed page 2: slug "acme", customDomain "status.acme.com" describe('custom domain routing โ status.acme.com (slug "acme")', () => { test("status.acme.com/ โ /status.acme.com/en (custom domain as prefix)", () => { const result = resolveRoute({ host: "status.acme.com", urlHost: "localhost:3000", pathname: "/", }); // Custom domain detected via x-forwarded-host, hostname type // Note: prefix is the full custom domain since getValidSubdomain doesn't // recognise "status.acme.com" as having a valid subdomain expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "en", localeExplicit: false, rewritePath: "/status.acme.com/en", }); });
test("status.acme.com/fr โ hostname routing with locale", () => { const result = resolveRoute({ host: "status.acme.com", urlHost: "localhost:3000", pathname: "/fr", }); expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "fr", localeExplicit: true, rewritePath: "/status.acme.com/fr", }); });
test("status.acme.com/en/events โ hostname routing with path", () => { const result = resolveRoute({ host: "status.acme.com", urlHost: "localhost:3000", pathname: "/en/events", }); expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "en", localeExplicit: true, rewritePath: "/status.acme.com/en/events", }); });
test("status.acme.com/monitors/1 โ defaults to en", () => { const result = resolveRoute({ host: "status.acme.com", urlHost: "localhost:3000", pathname: "/monitors/1", }); expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "en", localeExplicit: false, rewritePath: "/status.acme.com/en/monitors/1", }); }); });
// Custom domains with fewer than three labels, or a "www." first label, are // still host-keyed: the path must not be read as `/{slug}/...`. describe('custom domain routing โ apex and "www." hosts', () => { test("acme.com/events/report/1 โ hostname routing, path preserved", () => { const result = resolveRoute({ host: "acme.com", urlHost: "acme.com", pathname: "/events/report/1", }); expect(result).toEqual({ type: "hostname", prefix: "acme.com", locale: "en", localeExplicit: false, rewritePath: "/acme.com/en/events/report/1", }); });
test("acme.com/fr/events/maintenance/1 โ explicit locale, path preserved", () => { const result = resolveRoute({ host: "acme.com", urlHost: "acme.com", pathname: "/fr/events/maintenance/1", }); expect(result).toEqual({ type: "hostname", prefix: "acme.com", locale: "fr", localeExplicit: true, rewritePath: "/acme.com/fr/events/maintenance/1", }); });
test("www.acme.com/monitors/1 โ hostname routing, path preserved", () => { const result = resolveRoute({ host: "www.acme.com", urlHost: "www.acme.com", pathname: "/monitors/1", }); expect(result).toEqual({ type: "hostname", prefix: "www.acme.com", locale: "en", localeExplicit: false, rewritePath: "/www.acme.com/en/monitors/1", }); }); });
// apps/web proxies a custom domain as `https://www.stpg.dev/{host}/{rest}` // while forwarding the original host, so the leading segment is redundant. describe("custom domain routing โ host also present as path prefix", () => { test("status.acme.com + /status.acme.com/events/report/1 โ segment not duplicated", () => { const result = resolveRoute({ host: "status.acme.com", urlHost: "www.stpg.dev", pathname: "/status.acme.com/events/report/1", }); expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "en", localeExplicit: false, rewritePath: "/status.acme.com/en/events/report/1", }); });
test("status.acme.com + /status.acme.com/fr/events โ locale read after the prefix", () => { const result = resolveRoute({ host: "status.acme.com", urlHost: "www.stpg.dev", pathname: "/status.acme.com/fr/events", }); expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "fr", localeExplicit: true, rewritePath: "/status.acme.com/fr/events", }); });
test("status.acme.com + /status.acme.com โ page root", () => { const result = resolveRoute({ host: "status.acme.com", urlHost: "www.stpg.dev", pathname: "/status.acme.com", }); expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "en", localeExplicit: false, rewritePath: "/status.acme.com/en", }); });
test("subdomain + /acme.openstatus.dev/events โ forwarded host stripped", () => { const result = resolveRoute({ host: "acme.openstatus.dev", urlHost: "www.stpg.dev", pathname: "/acme.openstatus.dev/events", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "en", localeExplicit: false, rewritePath: "/acme/en/events", }); });
// Only the host is stripped: a first segment that merely matches the slug is // real path, e.g. a page whose slug is also a route name. test('slug "monitors" + /monitors/1 โ segment kept', () => { const result = resolveRoute({ host: "monitors.stpg.dev", urlHost: "monitors.stpg.dev", pathname: "/monitors/1", }); expect(result).toEqual({ type: "hostname", prefix: "monitors", locale: "en", localeExplicit: false, rewritePath: "/monitors/en/monitors/1", }); }); });
describe("edge cases", () => { test("root path on localhost returns null (no page)", () => { const result = resolveRoute({ host: "localhost:3000", urlHost: "localhost:3000", pathname: "/", }); expect(result).toBeNull(); });
test("case insensitive prefix", () => { const result = resolveRoute({ host: "ACME.localhost:3000", urlHost: "localhost:3000", pathname: "/FR/events", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "fr", localeExplicit: true, rewritePath: "/acme/fr/events", }); }); }); describe("host header source", () => { test("x-forwarded-host wins over the internal urlHost", () => { // Every proxied host is rewritten to the www.stpg.dev origin; only the // forwarded header still carries the tenant. const result = resolveRoute({ host: "status.acme.com", urlHost: "www.stpg.dev", pathname: "/monitors/1", }); expect(result).toEqual({ type: "hostname", prefix: "status.acme.com", locale: "en", localeExplicit: false, rewritePath: "/status.acme.com/en/monitors/1", }); });
test("no forwarded header falls back to urlHost", () => { const result = resolveRoute({ host: null, urlHost: "acme.openstatus.dev", pathname: "/events", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "en", localeExplicit: false, rewritePath: "/acme/en/events", }); });
test("origin host alone resolves no tenant", () => { // www.stpg.dev/ reached directly โ nothing to look up, so the request // falls through to `/`. expect( resolveRoute({ host: "www.stpg.dev", urlHost: "www.stpg.dev", pathname: "/", }), ).toBeNull(); }); });
describe("vercel preview deployments", () => { test("preview root resolves no tenant", () => { expect( resolveRoute({ host: "status-page-abc123.vercel.app", urlHost: "status-page-abc123.vercel.app", pathname: "/", }), ).toBeNull(); });
test("preview uses path routing, not the deployment name", () => { const result = resolveRoute({ host: "status-page-abc123.vercel.app", urlHost: "status-page-abc123.vercel.app", pathname: "/acme/en", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "en", localeExplicit: true, rewritePath: "/acme/en", }); });
test("a forwarded preview host with a non-preview urlHost reads the deployment name as a slug", () => { // The `.vercel.app` guard tests urlHost only. Harmless โ no page matches // a deployment name โ but pinned so a fix is deliberate. const result = resolveRoute({ host: "status-page-abc123.vercel.app", urlHost: "www.stpg.dev", pathname: "/", }); expect(result?.prefix).toBe("status-page-abc123"); }); });
describe("path shapes", () => { test("trailing slash does not add an empty segment", () => { const result = resolveRoute({ host: "acme.openstatus.dev", urlHost: "www.stpg.dev", pathname: "/events/", }); expect(result?.rewritePath).toBe("/acme/en/events"); });
test("repeated slashes collapse", () => { const result = resolveRoute({ host: "acme.openstatus.dev", urlHost: "www.stpg.dev", pathname: "//events", }); expect(result?.rewritePath).toBe("/acme/en/events"); });
test("an unsupported locale-shaped segment is treated as a path segment", () => { const result = resolveRoute({ host: "acme.openstatus.dev", urlHost: "www.stpg.dev", pathname: "/de-DE/events", }); expect(result).toEqual({ type: "hostname", prefix: "acme", locale: "en", localeExplicit: false, rewritePath: "/acme/en/de-DE/events", }); });
test("path routing lowercases the lookup prefix but rewrites the original casing", () => { // The `[locale]` layout then rejects "EN" and renders the 404. const result = resolveRoute({ host: "www.stpg.dev", urlHost: "www.stpg.dev", pathname: "/ACME/EN/events", }); expect(result).toEqual({ type: "pathname", prefix: "acme", locale: "en", localeExplicit: true, rewritePath: "/ACME/EN/events", }); }); });
describe("hosts with no tenant โ these fall through to `/`", () => { // The proxy passes through when the resolved prefix matches no `page` row, // and `/` is the theme explorer. `isThemeExplorerHost` is what keeps the // explorer off the hosts below; see theme-explorer-host.test.ts. test("the theme explorer host resolves as a normal subdomain", () => { const result = resolveRoute({ host: "themes.openstatus.dev", urlHost: "www.stpg.dev", pathname: "/", }); expect(result?.prefix).toBe("themes"); });
test("an unknown subdomain resolves to its own slug", () => { const result = resolveRoute({ host: "does-not-exist.openstatus.dev", urlHost: "www.stpg.dev", pathname: "/", }); expect(result?.prefix).toBe("does-not-exist"); });
test("a custom domain missing from the page table resolves to the full host", () => { const result = resolveRoute({ host: "status.unconfigured.com", urlHost: "www.stpg.dev", pathname: "/", }); expect(result?.prefix).toBe("status.unconfigured.com"); });
test("a look-alike host resolves to the tenant slug it imitates", () => { // Substring match in getValidSubdomain โ see domain.test.ts. const result = resolveRoute({ host: "acme.openstatus.dev.evil.com", urlHost: "www.stpg.dev", pathname: "/", }); expect(result?.prefix).toBe("acme"); }); });});