fix(kafka): support cluster address separators

Co-authored-by: zipg <4047349+zipg@users.noreply.github.com>
This commit is contained in:
zipgandzipg authored and GitHub committed 2026-07-06 18:11:10 +08:00
1 parent 51693bf296
commit a212ccbfa7
3 files changed
+60 -28

No files matched your search

@@ -0,0 +1,33 @@
const KAFKA_BOOTSTRAP_SERVER_SEPARATOR = /[\s,;,;]+/u;
function requireKafkaBootstrapServers(value: string): string {
const trimmed = value.trim();
if (!trimmed) throw new Error("Kafka bootstrap servers are required");
return trimmed;
}
function normalizeKafkaBootstrapServer(server: string): string {
if (server.includes("://")) {
throw new Error("Kafka bootstrap servers must be host:port values without a URL scheme");
}
let parsed: URL;
try {
parsed = new URL(`kafka://${server}`);
} catch {
throw new Error("Kafka bootstrap servers are invalid");
}
if (!parsed.hostname || parsed.username || parsed.password || parsed.search || parsed.hash || (parsed.pathname && parsed.pathname !== "/")) {
throw new Error("Kafka bootstrap servers are invalid");
}
return server;
}
export function normalizeKafkaBootstrapServers(value: string): string {
const servers = requireKafkaBootstrapServers(value)
.split(KAFKA_BOOTSTRAP_SERVER_SEPARATOR)
.map((server) => server.trim())
.filter(Boolean)
.map(normalizeKafkaBootstrapServer);
if (!servers.length) throw new Error("Kafka bootstrap servers are required");
return servers.join(",");
}