mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-11 03:14:36 +00:00
refactor: harden outbound, matrix bootstrap, and plugin entry resolution
This commit is contained in:
@@ -428,12 +428,21 @@ async function deliverOutboundPayloadsCore(
|
||||
})),
|
||||
};
|
||||
};
|
||||
const normalizeWhatsAppPayload = (payload: ReplyPayload): ReplyPayload | null => {
|
||||
const hasMedia = Boolean(payload.mediaUrl) || (payload.mediaUrls?.length ?? 0) > 0;
|
||||
const hasMediaPayload = (payload: ReplyPayload): boolean =>
|
||||
Boolean(payload.mediaUrl) || (payload.mediaUrls?.length ?? 0) > 0;
|
||||
const hasChannelDataPayload = (payload: ReplyPayload): boolean =>
|
||||
Boolean(payload.channelData && Object.keys(payload.channelData).length > 0);
|
||||
const normalizePayloadForChannelDelivery = (
|
||||
payload: ReplyPayload,
|
||||
channelId: string,
|
||||
): ReplyPayload | null => {
|
||||
const hasMedia = hasMediaPayload(payload);
|
||||
const hasChannelData = hasChannelDataPayload(payload);
|
||||
const rawText = typeof payload.text === "string" ? payload.text : "";
|
||||
const normalizedText = rawText.replace(/^(?:[ \t]*\r?\n)+/, "");
|
||||
const normalizedText =
|
||||
channelId === "whatsapp" ? rawText.replace(/^(?:[ \t]*\r?\n)+/, "") : rawText;
|
||||
if (!normalizedText.trim()) {
|
||||
if (!hasMedia) {
|
||||
if (!hasMedia && !hasChannelData) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
@@ -441,25 +450,14 @@ async function deliverOutboundPayloadsCore(
|
||||
text: "",
|
||||
};
|
||||
}
|
||||
if (normalizedText === rawText) {
|
||||
return payload;
|
||||
}
|
||||
return {
|
||||
...payload,
|
||||
text: normalizedText,
|
||||
};
|
||||
};
|
||||
const normalizeEmptyTextPayload = (payload: ReplyPayload): ReplyPayload | null => {
|
||||
const hasMedia = Boolean(payload.mediaUrl) || (payload.mediaUrls?.length ?? 0) > 0;
|
||||
const rawText = typeof payload.text === "string" ? payload.text : "";
|
||||
if (!rawText.trim()) {
|
||||
if (!hasMedia) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
...payload,
|
||||
text: "",
|
||||
};
|
||||
}
|
||||
return payload;
|
||||
};
|
||||
const normalizedPayloads = normalizeReplyPayloadsForDelivery(payloads)
|
||||
.map((payload) => {
|
||||
// Strip HTML tags for plain-text surfaces (WhatsApp, Signal, etc.)
|
||||
@@ -475,10 +473,7 @@ async function deliverOutboundPayloadsCore(
|
||||
return { ...payload, text: sanitizeForPlainText(payload.text) };
|
||||
})
|
||||
.flatMap((payload) => {
|
||||
const normalized =
|
||||
channel === "whatsapp"
|
||||
? normalizeWhatsAppPayload(payload)
|
||||
: normalizeEmptyTextPayload(payload);
|
||||
const normalized = normalizePayloadForChannelDelivery(payload, channel);
|
||||
return normalized ? [normalized] : [];
|
||||
});
|
||||
const hookRunner = getGlobalHookRunner();
|
||||
|
||||
Reference in New Issue
Block a user