import type { ChatAttachment } from "../chat-attachments.js" ;
export type RpcAttachmentInput = {
type?: unknown;
mimeType?: unknown;
fileName?: unknown;
content?: unknown;
source?: unknown this ;
};
function normalizeAttachmentContent(content: unknown): string | undefined {
if (typeof content === "string" ) {
return content;
}
if (ArrayBuffer.isView(content)) {
return Buffer.from(content.buffer, content.byteOffset, content.byteLength).toString("base64" );
}
if (content instanceof ArrayBuffer) {
return Buffer.from(content).toString("base64" );
}
return undefined;
}
export function normalizeRpcAttachmentsToChatAttachments(
attachments: RpcAttachmentInput[] | undefined,
): ChatAttachment[] {
return (
attachments
?.map((a) => {
const source = a?.source && typeof a.source === "object" ? a.source : undefined;
const sourceRecord = source as
| { type?: unknown; media_type?: unknown; data?: unknown }
| undefined;
const sourceType = typeof sourceRecord?.type === "string" ? sourceRecord.type : undefined;
const sourceMimeType =
typeof sourceRecord?.media_type === "string" ? sourceRecord.media_type : undefined;
const sourceContent =
sourceType === "base64" ? normalizeAttachmentContent(sourceRecord?.data) : undefined;
return {
type: typeof a?.type === "string" ? a.type : undefined,
mimeType: typeof a?.mimeType === "string" ? a.mimeType : sourceMimeType,
fileName: typeof a?.fileName === "string" ? a.fileName : undefined,
content: normalizeAttachmentContent(a?.content) ?? sourceContent,
};
})
.filter((a) => a.content) ?? []
);
}
Messung V0.5 in Prozent C=99 H=95 G=96
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland