Routing: precompile session key regexes (#1697)

Co-authored-by: Ray Tien <ray0907@users.noreply.github.com>
This commit is contained in:
Shadow
2026-01-25 21:15:20 -06:00
parent 9ecbb0ae81
commit 73507e8654
2 changed files with 19 additions and 12 deletions

View File

@@ -18,6 +18,7 @@ Status: unreleased.
- Telegram: allow caption param for media sends. (#1888) Thanks @mguellsegarra. - Telegram: allow caption param for media sends. (#1888) Thanks @mguellsegarra.
- Telegram: avoid block replies when streaming is disabled. (#1885) Thanks @ivancasco. - Telegram: avoid block replies when streaming is disabled. (#1885) Thanks @ivancasco.
- Auth: show copyable Google auth URL after ASCII prompt. (#1787) Thanks @robbyczgw-cla. - Auth: show copyable Google auth URL after ASCII prompt. (#1787) Thanks @robbyczgw-cla.
- Routing: precompile session key regexes. (#1697) Thanks @Ray0907.
## 2026.1.24-3 ## 2026.1.24-3

View File

@@ -11,6 +11,12 @@ export const DEFAULT_AGENT_ID = "main";
export const DEFAULT_MAIN_KEY = "main"; export const DEFAULT_MAIN_KEY = "main";
export const DEFAULT_ACCOUNT_ID = "default"; export const DEFAULT_ACCOUNT_ID = "default";
// Pre-compiled regex
const VALID_ID_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/i;
const INVALID_CHARS_RE = /[^a-z0-9_-]+/g;
const LEADING_DASH_RE = /^-+/;
const TRAILING_DASH_RE = /-+$/;
function normalizeToken(value: string | undefined | null): string { function normalizeToken(value: string | undefined | null): string {
return (value ?? "").trim().toLowerCase(); return (value ?? "").trim().toLowerCase();
} }
@@ -52,14 +58,14 @@ export function normalizeAgentId(value: string | undefined | null): string {
const trimmed = (value ?? "").trim(); const trimmed = (value ?? "").trim();
if (!trimmed) return DEFAULT_AGENT_ID; if (!trimmed) return DEFAULT_AGENT_ID;
// Keep it path-safe + shell-friendly. // Keep it path-safe + shell-friendly.
if (/^[a-z0-9][a-z0-9_-]{0,63}$/i.test(trimmed)) return trimmed.toLowerCase(); if (VALID_ID_RE.test(trimmed)) return trimmed.toLowerCase();
// Best-effort fallback: collapse invalid characters to "-" // Best-effort fallback: collapse invalid characters to "-"
return ( return (
trimmed trimmed
.toLowerCase() .toLowerCase()
.replace(/[^a-z0-9_-]+/g, "-") .replace(INVALID_CHARS_RE, "-")
.replace(/^-+/, "") .replace(LEADING_DASH_RE, "")
.replace(/-+$/, "") .replace(TRAILING_DASH_RE, "")
.slice(0, 64) || DEFAULT_AGENT_ID .slice(0, 64) || DEFAULT_AGENT_ID
); );
} }
@@ -67,13 +73,13 @@ export function normalizeAgentId(value: string | undefined | null): string {
export function sanitizeAgentId(value: string | undefined | null): string { export function sanitizeAgentId(value: string | undefined | null): string {
const trimmed = (value ?? "").trim(); const trimmed = (value ?? "").trim();
if (!trimmed) return DEFAULT_AGENT_ID; if (!trimmed) return DEFAULT_AGENT_ID;
if (/^[a-z0-9][a-z0-9_-]{0,63}$/i.test(trimmed)) return trimmed.toLowerCase(); if (VALID_ID_RE.test(trimmed)) return trimmed.toLowerCase();
return ( return (
trimmed trimmed
.toLowerCase() .toLowerCase()
.replace(/[^a-z0-9_-]+/gi, "-") .replace(INVALID_CHARS_RE, "-")
.replace(/^-+/, "") .replace(LEADING_DASH_RE, "")
.replace(/-+$/, "") .replace(TRAILING_DASH_RE, "")
.slice(0, 64) || DEFAULT_AGENT_ID .slice(0, 64) || DEFAULT_AGENT_ID
); );
} }
@@ -81,13 +87,13 @@ export function sanitizeAgentId(value: string | undefined | null): string {
export function normalizeAccountId(value: string | undefined | null): string { export function normalizeAccountId(value: string | undefined | null): string {
const trimmed = (value ?? "").trim(); const trimmed = (value ?? "").trim();
if (!trimmed) return DEFAULT_ACCOUNT_ID; if (!trimmed) return DEFAULT_ACCOUNT_ID;
if (/^[a-z0-9][a-z0-9_-]{0,63}$/i.test(trimmed)) return trimmed.toLowerCase(); if (VALID_ID_RE.test(trimmed)) return trimmed.toLowerCase();
return ( return (
trimmed trimmed
.toLowerCase() .toLowerCase()
.replace(/[^a-z0-9_-]+/g, "-") .replace(INVALID_CHARS_RE, "-")
.replace(/^-+/, "") .replace(LEADING_DASH_RE, "")
.replace(/-+$/, "") .replace(TRAILING_DASH_RE, "")
.slice(0, 64) || DEFAULT_ACCOUNT_ID .slice(0, 64) || DEFAULT_ACCOUNT_ID
); );
} }