1 import type { UseCaseInterface } from '../Domain/UseCase/UseCaseInterface'
2 import type { Result } from '../Domain/Result/Result'
3 import type { EncryptionService } from '../Services/Encryption/EncryptionService'
4 import type { EncryptionContext } from '../Services/Encryption/EncryptionContext'
5 import type { DocumentKeys } from '@proton/drive-store'
6 import { GetAssociatedEncryptionDataForRealtimeMessage } from './GetAdditionalEncryptionData'
7 import type { EncryptionMetadata } from '../Types/EncryptionMetadata'
10 * Encrypts a message directed towards the RTS.
12 export class EncryptMessage implements UseCaseInterface<Uint8Array> {
13 constructor(private encryption: EncryptionService<EncryptionContext.RealtimeMessage>) {}
15 async execute(update: Uint8Array, metadata: EncryptionMetadata, keys: DocumentKeys): Promise<Result<Uint8Array>> {
16 const aad = GetAssociatedEncryptionDataForRealtimeMessage(metadata)
18 const result = await this.encryption.signAndEncryptData(
21 keys.documentContentKey,
22 keys.userAddressPrivateKey,