You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
| import { RawMessage } from '../types/RawMessage';
 | |
| 
 | |
| import { EncryptionType, PubKey } from '../types';
 | |
| import { ClosedGroupMessage } from '../messages/outgoing/controlMessage/group/ClosedGroupMessage';
 | |
| import { ClosedGroupNewMessage } from '../messages/outgoing/controlMessage/group/ClosedGroupNewMessage';
 | |
| import _ from 'lodash';
 | |
| import { ClosedGroupEncryptionPairReplyMessage } from '../messages/outgoing/controlMessage/group/ClosedGroupEncryptionPairReplyMessage';
 | |
| import { ContentMessage } from '../messages/outgoing';
 | |
| import { ExpirationTimerUpdateMessage } from '../messages/outgoing/controlMessage/ExpirationTimerUpdateMessage';
 | |
| 
 | |
| function getEncryptionTypeFromMessageType(message: ContentMessage): EncryptionType {
 | |
|   // ClosedGroupNewMessage is sent using established channels, so using fallback
 | |
|   if (
 | |
|     message instanceof ClosedGroupNewMessage ||
 | |
|     message instanceof ClosedGroupEncryptionPairReplyMessage
 | |
|   ) {
 | |
|     return EncryptionType.Fallback;
 | |
|   }
 | |
| 
 | |
|   // 1. any ClosedGroupMessage which is not a ClosedGroupNewMessage must be encoded with ClosedGroup
 | |
|   // 2. if TypingMessage or ExpirationTimer and groupId is set => must be encoded with ClosedGroup too
 | |
|   if (
 | |
|     message instanceof ClosedGroupMessage ||
 | |
|     (message instanceof ExpirationTimerUpdateMessage && message.groupId)
 | |
|   ) {
 | |
|     return EncryptionType.ClosedGroup;
 | |
|   } else {
 | |
|     return EncryptionType.Fallback;
 | |
|   }
 | |
| }
 | |
| 
 | |
| export async function toRawMessage(device: PubKey, message: ContentMessage): Promise<RawMessage> {
 | |
|   const timestamp = message.timestamp;
 | |
|   const ttl = message.ttl();
 | |
|   const plainTextBuffer = message.plainTextBuffer();
 | |
| 
 | |
|   const encryption = getEncryptionTypeFromMessageType(message);
 | |
| 
 | |
|   // tslint:disable-next-line: no-unnecessary-local-variable
 | |
|   const rawMessage: RawMessage = {
 | |
|     identifier: message.identifier,
 | |
|     plainTextBuffer,
 | |
|     timestamp,
 | |
|     device: device.key,
 | |
|     ttl,
 | |
|     encryption,
 | |
|   };
 | |
| 
 | |
|   return rawMessage;
 | |
| }
 |