openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
56 lines (55 loc) • 2.04 kB
JavaScript
import { c as isRecord } from "./record-coerce-DItp3I4t.js";
import { l as normalizeOptionalString } from "./string-coerce-CIXf7egm.js";
//#region src/infra/outbound/message-action-contracts.ts
function resolveMessageSendOutcome(sendResult, action = "Message") {
if (!sendResult || sendResult.deliveryStatus === void 0 || sendResult.deliveryStatus === "sent") return { ok: true };
switch (sendResult.deliveryStatus) {
case "suppressed": return {
ok: false,
error: `${action} send suppressed: ${sendResult.suppressionReason ?? "unknown reason"}.`
};
case "failed": return {
ok: false,
error: sendResult.error ?? `${action} send failed.`
};
case "partial_failed": return {
ok: false,
error: sendResult.error ?? `${action} send partially failed.`,
sentBeforeError: true
};
}
return sendResult.deliveryStatus;
}
function resolveMessageActionOutcome(result) {
if (result.kind === "broadcast") {
const failure = result.payload.results.find((entry) => !entry.ok);
return failure ? {
ok: false,
error: failure.error ?? "Broadcast failed."
} : { ok: true };
}
if (result.dryRun) return { ok: true };
const outcome = result.kind === "send" ? resolveMessageSendOutcome(result.sendResult) : { ok: true };
const payload = result.payload;
if (!outcome.ok || !isRecord(payload) || payload.ok !== false) return outcome;
return {
ok: false,
error: [
payload.error,
payload.warning,
payload.hint,
payload.reason
].map(normalizeOptionalString).find(Boolean) ?? `Message ${result.action} failed.`
};
}
function resolveMessageActionMessageId(payload) {
if (!payload || typeof payload !== "object") return;
const record = payload;
const direct = normalizeOptionalString(record.messageId);
if (direct) return direct;
const result = record.result;
if (!result || typeof result !== "object") return;
return normalizeOptionalString(result.messageId);
}
//#endregion
export { resolveMessageActionOutcome as n, resolveMessageSendOutcome as r, resolveMessageActionMessageId as t };