// Copyright 2023 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import type { AttachmentWithHydratedData, UploadedAttachmentType, } from '../types/Attachment'; import { MIMETypeToString } from '../types/MIME'; import { padAndEncryptAttachment, getRandomBytes } from '../Crypto'; import { strictAssert } from './assert'; export async function uploadAttachment( attachment: AttachmentWithHydratedData ): Promise { const keys = getRandomBytes(64); const encrypted = padAndEncryptAttachment({ plaintext: attachment.data, keys, }); const { server } = window.textsecure; strictAssert(server, 'WebAPI must be initialized'); const cdnKey = await server.putEncryptedAttachment(encrypted.ciphertext); const size = attachment.data.byteLength; return { cdnKey, cdnNumber: 2, key: keys, size, digest: encrypted.digest, plaintextHash: encrypted.plaintextHash, contentType: MIMETypeToString(attachment.contentType), fileName: attachment.fileName, flags: attachment.flags, width: attachment.width, height: attachment.height, caption: attachment.caption, blurHash: attachment.blurHash, }; }