initial commit

This commit is contained in:
root
2026-05-29 17:07:00 +02:00
commit c935e39fa1
30 changed files with 1263 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
export const RESERVED_SUBDOMAINS = new Set([
'app',
'api',
'www',
'admin',
'auth',
'mail',
'static',
]);
const SUBDOMAIN_RE = /^[a-z0-9-]{3,32}$/;
export function validateSubdomain(input: unknown):
| { ok: true; value: string }
| { ok: false; error: string } {
if (typeof input !== 'string') {
return { ok: false, error: 'subdomain must be a string' };
}
const value = input.trim().toLowerCase();
if (!SUBDOMAIN_RE.test(value)) {
return {
ok: false,
error: 'subdomain must be 332 chars, lowercase az, 09, hyphen',
};
}
if (RESERVED_SUBDOMAINS.has(value)) {
return { ok: false, error: `'${value}' is reserved` };
}
return { ok: true, value };
}