refactor: unify outbound result envelopes

This commit is contained in:
Peter Steinberger
2026-01-07 02:36:05 +00:00
parent 4bf5f37a44
commit aa635af6d0
7 changed files with 173 additions and 25 deletions

View File

@@ -0,0 +1,52 @@
import type { ReplyPayload } from "../../auto-reply/types.js";
import type { OutboundDeliveryJson } from "./format.js";
import {
normalizeOutboundPayloadsForJson,
type OutboundPayloadJson,
} from "./payloads.js";
export type OutboundResultEnvelope = {
payloads?: OutboundPayloadJson[];
meta?: unknown;
delivery?: OutboundDeliveryJson;
};
type BuildEnvelopeParams = {
payloads?: ReplyPayload[] | OutboundPayloadJson[];
meta?: unknown;
delivery?: OutboundDeliveryJson;
flattenDelivery?: boolean;
};
const isOutboundPayloadJson = (
payload: ReplyPayload | OutboundPayloadJson,
): payload is OutboundPayloadJson => "mediaUrl" in payload;
export function buildOutboundResultEnvelope(
params: BuildEnvelopeParams,
): OutboundResultEnvelope | OutboundDeliveryJson {
const hasPayloads = params.payloads !== undefined;
const payloads =
params.payloads === undefined
? undefined
: params.payloads.length === 0
? []
: isOutboundPayloadJson(params.payloads[0])
? (params.payloads as OutboundPayloadJson[])
: normalizeOutboundPayloadsForJson(params.payloads as ReplyPayload[]);
if (
params.flattenDelivery !== false &&
params.delivery &&
!params.meta &&
!hasPayloads
) {
return params.delivery;
}
return {
...(hasPayloads ? { payloads } : {}),
...(params.meta ? { meta: params.meta } : {}),
...(params.delivery ? { delivery: params.delivery } : {}),
};
}