openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
65 lines (64 loc) • 2.78 kB
JavaScript
import { a as normalizeLowercaseStringOrEmpty, c as normalizeOptionalString, l as normalizeOptionalStringifiedId } from "./string-coerce-mnp54Vah.js";
import { n as normalizeAccountId } from "./account-id-Df9e41E6.js";
import "./string-coerce-runtime-CEGJWkQ_.js";
import "./routing-CQ63ICPX.js";
//#region extensions/discord/src/directory-cache.ts
const DISCORD_DIRECTORY_CACHE_MAX_ENTRIES = 4e3;
const DISCORD_DISCRIMINATOR_SUFFIX = /#\d{4}$/;
const DIRECTORY_HANDLE_CACHE = /* @__PURE__ */ new Map();
function normalizeAccountCacheKey(accountId) {
return normalizeAccountId(accountId ?? "default") || "default";
}
function normalizeSnowflake(value) {
const text = normalizeOptionalStringifiedId(value) ?? "";
if (!/^\d+$/.test(text)) return null;
return text;
}
function normalizeHandleKey(raw) {
let handle = normalizeOptionalString(raw) ?? "";
if (!handle) return null;
if (handle.startsWith("@")) handle = normalizeOptionalString(handle.slice(1)) ?? "";
if (!handle || /\s/.test(handle)) return null;
return normalizeLowercaseStringOrEmpty(handle);
}
function ensureAccountCache(accountId) {
const cacheKey = normalizeAccountCacheKey(accountId);
const existing = DIRECTORY_HANDLE_CACHE.get(cacheKey);
if (existing) return existing;
const created = /* @__PURE__ */ new Map();
DIRECTORY_HANDLE_CACHE.set(cacheKey, created);
return created;
}
function setCacheEntry(cache, key, userId) {
if (cache.has(key)) cache.delete(key);
cache.set(key, userId);
if (cache.size <= DISCORD_DIRECTORY_CACHE_MAX_ENTRIES) return;
const oldest = cache.keys().next();
if (!oldest.done) cache.delete(oldest.value);
}
function rememberDiscordDirectoryUser(params) {
const userId = normalizeSnowflake(params.userId);
if (!userId) return;
const cache = ensureAccountCache(params.accountId);
for (const candidate of params.handles) {
if (typeof candidate !== "string") continue;
const handle = normalizeHandleKey(candidate);
if (!handle) continue;
setCacheEntry(cache, handle, userId);
const withoutDiscriminator = handle.replace(DISCORD_DISCRIMINATOR_SUFFIX, "");
if (withoutDiscriminator && withoutDiscriminator !== handle) setCacheEntry(cache, withoutDiscriminator, userId);
}
}
function resolveDiscordDirectoryUserId(params) {
const cache = DIRECTORY_HANDLE_CACHE.get(normalizeAccountCacheKey(params.accountId));
if (!cache) return;
const handle = normalizeHandleKey(params.handle);
if (!handle) return;
const direct = cache.get(handle);
if (direct) return direct;
const withoutDiscriminator = handle.replace(DISCORD_DISCRIMINATOR_SUFFIX, "");
if (!withoutDiscriminator || withoutDiscriminator === handle) return;
return cache.get(withoutDiscriminator);
}
//#endregion
export { resolveDiscordDirectoryUserId as n, rememberDiscordDirectoryUser as t };