This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw/npm/projects/openclaw-feishu-dc69f44688/node_modules/@openclaw/feishu/dist/targets-BUjQ1TcA.js
T

49 lines
2.3 KiB
JavaScript

import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
//#region extensions/feishu/src/targets.ts
const CHAT_ID_PREFIX = "oc_";
const OPEN_ID_PREFIX = "ou_";
const USER_ID_REGEX = /^[a-zA-Z0-9_-]+$/;
function stripProviderPrefix(raw) {
return raw.replace(/^(feishu|lark):/i, "").trim();
}
function detectIdType(id) {
const trimmed = id.trim();
if (trimmed.startsWith(CHAT_ID_PREFIX)) return "chat_id";
if (trimmed.startsWith(OPEN_ID_PREFIX)) return "open_id";
if (USER_ID_REGEX.test(trimmed)) return "user_id";
return null;
}
function normalizeFeishuTarget(raw) {
const trimmed = raw.trim();
if (!trimmed) return null;
const withoutProvider = stripProviderPrefix(trimmed);
const lowered = normalizeLowercaseStringOrEmpty(withoutProvider);
if (lowered.startsWith("chat:")) return withoutProvider.slice(5).trim() || null;
if (lowered.startsWith("group:")) return withoutProvider.slice(6).trim() || null;
if (lowered.startsWith("channel:")) return withoutProvider.slice(8).trim() || null;
if (lowered.startsWith("user:")) return withoutProvider.slice(5).trim() || null;
if (lowered.startsWith("dm:")) return withoutProvider.slice(3).trim() || null;
if (lowered.startsWith("open_id:")) return withoutProvider.slice(8).trim() || null;
return withoutProvider;
}
function resolveReceiveIdType(id) {
const trimmed = id.trim();
const lowered = normalizeLowercaseStringOrEmpty(trimmed);
if (lowered.startsWith("chat:") || lowered.startsWith("group:") || lowered.startsWith("channel:")) return "chat_id";
if (lowered.startsWith("open_id:")) return "open_id";
if (lowered.startsWith("user:") || lowered.startsWith("dm:")) return trimmed.replace(/^(user|dm):/i, "").trim().startsWith(OPEN_ID_PREFIX) ? "open_id" : "user_id";
if (trimmed.startsWith(CHAT_ID_PREFIX)) return "chat_id";
if (trimmed.startsWith(OPEN_ID_PREFIX)) return "open_id";
return "user_id";
}
function looksLikeFeishuId(raw) {
const trimmed = stripProviderPrefix(raw.trim());
if (!trimmed) return false;
if (/^(chat|group|channel|user|dm|open_id):/i.test(trimmed)) return true;
if (trimmed.startsWith(CHAT_ID_PREFIX)) return true;
if (trimmed.startsWith(OPEN_ID_PREFIX)) return true;
return false;
}
//#endregion
export { resolveReceiveIdType as i, looksLikeFeishuId as n, normalizeFeishuTarget as r, detectIdType as t };