/** * Federation Configuration * * Validates federation-related environment variables at startup. * Issue #338: Validate DEFAULT_WORKSPACE_ID is a valid UUID */ /** * UUID v4 regex pattern * Matches standard UUID format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx * where y is 8, 9, a, or b */ const UUID_V4_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; /** * Check if a string is a valid UUID v4 */ export function isValidUuidV4(value: string): boolean { return UUID_V4_REGEX.test(value); } /** * Get the configured default workspace ID for federation * @throws Error if DEFAULT_WORKSPACE_ID is not set or is not a valid UUID */ export function getDefaultWorkspaceId(): string { const workspaceId = process.env.DEFAULT_WORKSPACE_ID; if (!workspaceId || workspaceId.trim() === "") { throw new Error( "DEFAULT_WORKSPACE_ID environment variable is required for federation but is not set. " + "Please configure a valid UUID v4 workspace ID for handling incoming federation connections." ); } const trimmedId = workspaceId.trim(); if (!isValidUuidV4(trimmedId)) { throw new Error( `DEFAULT_WORKSPACE_ID must be a valid UUID v4. ` + `Current value "${trimmedId}" is not a valid UUID format. ` + `Expected format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx (where y is 8, 9, a, or b)` ); } return trimmedId; } /** * Validates federation configuration at startup. * Call this during module initialization to fail fast if misconfigured. * * @throws Error if DEFAULT_WORKSPACE_ID is not set or is not a valid UUID */ export function validateFederationConfig(): void { // Validate DEFAULT_WORKSPACE_ID - this will throw if invalid getDefaultWorkspaceId(); }