71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import {
|
|
buildChannelOutboundSessionRoute,
|
|
type ChannelOutboundSessionRouteParams,
|
|
} from "openclaw/plugin-sdk/core";
|
|
|
|
function stripZalouserTargetPrefix(raw: string): string {
|
|
return raw
|
|
.trim()
|
|
.replace(/^(zalouser|zlu):/i, "")
|
|
.trim();
|
|
}
|
|
|
|
function normalizePrefixedTarget(raw: string): string | undefined {
|
|
const trimmed = stripZalouserTargetPrefix(raw);
|
|
if (!trimmed) {
|
|
return undefined;
|
|
}
|
|
|
|
const lower = trimmed.toLowerCase();
|
|
if (lower.startsWith("group:")) {
|
|
const id = trimmed.slice("group:".length).trim();
|
|
return id ? `group:${id}` : undefined;
|
|
}
|
|
if (lower.startsWith("g:")) {
|
|
const id = trimmed.slice("g:".length).trim();
|
|
return id ? `group:${id}` : undefined;
|
|
}
|
|
if (lower.startsWith("user:")) {
|
|
const id = trimmed.slice("user:".length).trim();
|
|
return id ? `user:${id}` : undefined;
|
|
}
|
|
if (lower.startsWith("dm:")) {
|
|
const id = trimmed.slice("dm:".length).trim();
|
|
return id ? `user:${id}` : undefined;
|
|
}
|
|
if (lower.startsWith("u:")) {
|
|
const id = trimmed.slice("u:".length).trim();
|
|
return id ? `user:${id}` : undefined;
|
|
}
|
|
if (/^g-\S+$/i.test(trimmed)) {
|
|
return `group:${trimmed}`;
|
|
}
|
|
if (/^u-\S+$/i.test(trimmed)) {
|
|
return `user:${trimmed}`;
|
|
}
|
|
|
|
return trimmed;
|
|
}
|
|
|
|
export function resolveZalouserOutboundSessionRoute(params: ChannelOutboundSessionRouteParams) {
|
|
const normalized = normalizePrefixedTarget(params.target);
|
|
if (!normalized) {
|
|
return null;
|
|
}
|
|
const isGroup = normalized.toLowerCase().startsWith("group:");
|
|
const peerId = normalized.replace(/^(group|user):/i, "").trim();
|
|
return buildChannelOutboundSessionRoute({
|
|
cfg: params.cfg,
|
|
agentId: params.agentId,
|
|
channel: "zalouser",
|
|
accountId: params.accountId,
|
|
peer: {
|
|
kind: isGroup ? "group" : "direct",
|
|
id: peerId,
|
|
},
|
|
chatType: isGroup ? "group" : "direct",
|
|
from: isGroup ? `zalouser:group:${peerId}` : `zalouser:${peerId}`,
|
|
to: `zalouser:${peerId}`,
|
|
});
|
|
}
|