fix: normalize outbound media payloads

This commit is contained in:
Peter Steinberger
2026-01-24 04:53:30 +00:00
parent 975f5a5284
commit fd23b9b209
9 changed files with 155 additions and 14 deletions

View File

@@ -17,6 +17,7 @@ import {
type OutboundDeliveryResult,
type OutboundSendDeps,
} from "./deliver.js";
import { normalizeReplyPayloadsForDelivery } from "./payloads.js";
import type { OutboundChannel } from "./targets.js";
import { resolveOutboundTarget } from "./targets.js";
@@ -34,6 +35,7 @@ type MessageSendParams = {
content: string;
channel?: string;
mediaUrl?: string;
mediaUrls?: string[];
gifPlayback?: boolean;
accountId?: string;
dryRun?: boolean;
@@ -53,6 +55,7 @@ export type MessageSendResult = {
to: string;
via: "direct" | "gateway";
mediaUrl: string | null;
mediaUrls?: string[];
result?: OutboundDeliveryResult | { messageId: string };
dryRun?: boolean;
};
@@ -115,13 +118,29 @@ export async function sendMessage(params: MessageSendParams): Promise<MessageSen
throw new Error(`Unknown channel: ${channel}`);
}
const deliveryMode = plugin.outbound?.deliveryMode ?? "direct";
const normalizedPayloads = normalizeReplyPayloadsForDelivery([
{
text: params.content,
mediaUrl: params.mediaUrl,
mediaUrls: params.mediaUrls,
},
]);
const mirrorText = normalizedPayloads
.map((payload) => payload.text)
.filter(Boolean)
.join("\n");
const mirrorMediaUrls = normalizedPayloads.flatMap(
(payload) => payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []),
);
const primaryMediaUrl = mirrorMediaUrls[0] ?? params.mediaUrl ?? null;
if (params.dryRun) {
return {
channel,
to: params.to,
via: deliveryMode === "gateway" ? "gateway" : "direct",
mediaUrl: params.mediaUrl ?? null,
mediaUrl: primaryMediaUrl,
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : undefined,
dryRun: true,
};
}
@@ -142,15 +161,15 @@ export async function sendMessage(params: MessageSendParams): Promise<MessageSen
channel: outboundChannel,
to: resolvedTarget.to,
accountId: params.accountId,
payloads: [{ text: params.content, mediaUrl: params.mediaUrl }],
payloads: normalizedPayloads,
gifPlayback: params.gifPlayback,
deps: params.deps,
bestEffort: params.bestEffort,
mirror: params.mirror
? {
...params.mirror,
text: params.content,
mediaUrls: params.mediaUrl ? [params.mediaUrl] : undefined,
text: mirrorText || params.content,
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : undefined,
}
: undefined,
});
@@ -159,7 +178,8 @@ export async function sendMessage(params: MessageSendParams): Promise<MessageSen
channel,
to: params.to,
via: "direct",
mediaUrl: params.mediaUrl ?? null,
mediaUrl: primaryMediaUrl,
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : undefined,
result: results.at(-1),
};
}
@@ -173,6 +193,7 @@ export async function sendMessage(params: MessageSendParams): Promise<MessageSen
to: params.to,
message: params.content,
mediaUrl: params.mediaUrl,
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : params.mediaUrls,
gifPlayback: params.gifPlayback,
accountId: params.accountId,
channel,
@@ -189,7 +210,8 @@ export async function sendMessage(params: MessageSendParams): Promise<MessageSen
channel,
to: params.to,
via: "gateway",
mediaUrl: params.mediaUrl ?? null,
mediaUrl: primaryMediaUrl,
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : undefined,
result,
};
}