UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

92 lines (91 loc) • 3.64 kB
import { l as normalizeOptionalString } from "./string-coerce-6kR-86XC.mjs"; import { c as isRecord } from "./record-coerce-TIsquoVR.mjs"; import { t as normalizeConversationReadInvocationOrigin } from "./conversation-read-origin-E3olMOwo.mjs"; //#region src/infra/outbound/message-action-contracts.ts function resolveMessageSendOutcome(sendResult, action = "Message") { if (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"}.`, ...sendResult.sentBeforeError ? { sentBeforeError: true } : {} }; case "failed": return { ok: false, error: sendResult.error ?? `${action} send failed.`, ...sendResult.sentBeforeError ? { sentBeforeError: true } : {} }; case "partial_failed": return { ok: false, error: sendResult.error ?? `${action} send partially failed.`, sentBeforeError: true }; } return sendResult.deliveryStatus; } function resolveMessageActionOutcome(result, action = "Message") { 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, action) : { ok: true }; const payload = result.payload; if (!outcome.ok || !isRecord(payload) || payload.ok !== false) return outcome; const error = [ payload.error, payload.warning, payload.hint, payload.reason ].map(normalizeOptionalString).find(Boolean) ?? `Message ${result.action} failed.`; return payload.sentBeforeError === true ? { ok: false, error, sentBeforeError: true } : { ok: false, error }; } 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); } function createChannelActionContext(params) { const mediaAccess = params.mediaAccess ?? params.ctx.mediaAccess; return { channel: params.ctx.channel, action: params.action, cfg: params.ctx.cfg, params: params.ctx.params, ...params.reply ? { reply: params.reply } : {}, ...mediaAccess ? { mediaAccess } : {}, mediaLocalRoots: mediaAccess?.localRoots, mediaReadFile: mediaAccess?.readFile, accountId: params.ctx.accountId ?? void 0, requesterAccountId: params.ctx.input.requesterAccountId ?? void 0, requesterSenderId: params.ctx.input.requesterSenderId ?? void 0, senderIsOwner: params.ctx.input.senderIsOwner, conversationReadOrigin: normalizeConversationReadInvocationOrigin(params.ctx.input.conversationReadOrigin), sessionKey: params.ctx.input.sessionKey, sessionId: params.ctx.input.sessionId, inboundEventKind: params.ctx.input.inboundEventKind, agentId: params.ctx.agentId, gateway: params.ctx.gateway, toolContext: params.ctx.input.toolContext, dryRun: params.ctx.dryRun, onPlatformSendDispatch: params.ctx.input.onPlatformSendDispatch, assertDirectAdapterHandoff: params.ctx.input.assertDirectAdapterHandoff, ...params.action === "send" ? { skipQueue: params.ctx.input.skipQueue } : {} }; } //#endregion export { resolveMessageActionMessageId as n, resolveMessageActionOutcome as r, createChannelActionContext as t };