openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
55 lines (54 loc) • 2.98 kB
JavaScript
import { o as hasReplyPayloadContent } from "./payload-DYE7bQ2k.js";
//#region src/channels/message/capabilities.ts
function hasMediaPayload(payload) {
if (payload.mediaUrl?.trim()) return true;
return Array.isArray(payload.mediaUrls) && payload.mediaUrls.some((url) => typeof url === "string" && url.trim().length > 0);
}
function setRequired(requirements, capability, required) {
if (required === true) requirements[capability] = true;
}
/** Derives the adapter capabilities core needs before it can require durable final delivery. */
function deriveDurableFinalDeliveryRequirements(params) {
const requirements = {};
setRequired(requirements, "text", true);
setRequired(requirements, "media", hasMediaPayload(params.payload));
setRequired(requirements, "replyTo", params.replyToId != null || params.payload.replyToId != null);
setRequired(requirements, "thread", params.threadId != null);
setRequired(requirements, "silent", params.silent);
setRequired(requirements, "messageSendingHooks", params.messageSendingHooks !== false);
setRequired(requirements, "payload", params.payloadTransport);
setRequired(requirements, "batch", params.batch);
setRequired(requirements, "reconcileUnknownSend", params.reconcileUnknownSend);
setRequired(requirements, "afterSendSuccess", params.afterSendSuccess);
setRequired(requirements, "afterCommit", params.afterCommit);
for (const [capability, required] of Object.entries(params.extraCapabilities ?? {})) setRequired(requirements, capability, required);
return requirements;
}
/** Matches the structured-payload branch selected by core delivery. */
function payloadRequiresDurablePayloadTransport(payload, options) {
return payload.isError === true && options?.sendTextOnlyErrorPayloads === true || hasReplyPayloadContent({
presentation: payload.presentation,
interactive: payload.interactive,
channelData: payload.channelData,
location: payload.location
}, { extraContent: payload.location != null }) || payload.audioAsVoice === true || payload.videoAsNote === true;
}
/** Derives the union of required capabilities from the final concrete batch. */
function deriveDurableFinalDeliveryRequirementsForBatch(params) {
const requirements = params.reconcileUnknownSend && params.payloads.length > 0 ? { reconcileUnknownSend: true } : {};
for (const payload of params.payloads) {
const current = deriveDurableFinalDeliveryRequirements({
payload,
replyToId: params.replyToId,
threadId: params.threadId,
silent: params.silent,
payloadTransport: payloadRequiresDurablePayloadTransport(payload),
batch: params.payloads.length > 1,
reconcileUnknownSend: params.reconcileUnknownSend
});
for (const [capability, required] of Object.entries(current)) setRequired(requirements, capability, required);
}
return requirements;
}
//#endregion
export { deriveDurableFinalDeliveryRequirementsForBatch as n, payloadRequiresDurablePayloadTransport as r, deriveDurableFinalDeliveryRequirements as t };