import { createHash } from "node:crypto" ;
import { type WebClientOptions, WebClient } from "@slack/web-api" ;
import { resolveSlackWebClientOptions, resolveSlackWriteClientOptions } from "./client-options.js" ;
const SLACK_WRITE_CLIENT_CACHE_MAX = 32 ;
const slackWriteClientCache = new Map<string, WebClient>();
export {
resolveSlackWebClientOptions,
resolveSlackWriteClientOptions,
SLACK_DEFAULT_RETRY_OPTIONS,
SLACK_WRITE_RETRY_OPTIONS,
} from "./client-options.js" ;
export function createSlackWebClient(token: string, options: WebClientOptions = {}) {
return new WebClient(token, resolveSlackWebClientOptions(options));
}
export function createSlackWriteClient(token: string, options: WebClientOptions = {}) {
return new WebClient(token, resolveSlackWriteClientOptions(options));
}
export function createSlackTokenCacheKey(token: string): string {
return `sha256:${createHash("sha256" ).update(token).digest("base64url" )}`;
}
export function getSlackWriteClient(token: string): WebClient {
const tokenKey = createSlackTokenCacheKey(token);
const cached = slackWriteClientCache.get(tokenKey);
if (cached) {
slackWriteClientCache.delete (tokenKey);
slackWriteClientCache.set(tokenKey, cached);
return cached;
}
const client = createSlackWriteClient(token);
if (slackWriteClientCache.size >= SLACK_WRITE_CLIENT_CACHE_MAX) {
const oldestTokenKey = slackWriteClientCache.keys().next().value;
if (oldestTokenKey) {
slackWriteClientCache.delete (oldestTokenKey);
}
}
slackWriteClientCache.set(tokenKey, client);
return client;
}
export function clearSlackWriteClientCacheForTest(): void {
slackWriteClientCache.clear();
}
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland