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.
		
		
		
		
		
			
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
import { UserUtils } from '../session/utils';
 | 
						|
import { MessageModel } from './message';
 | 
						|
import { MessageAttributesOptionals, MessageModelType } from './messageType';
 | 
						|
 | 
						|
function getSharedAttributesForSwarmMessage({
 | 
						|
  conversationId,
 | 
						|
  messageHash,
 | 
						|
  sentAt,
 | 
						|
}: {
 | 
						|
  conversationId: string;
 | 
						|
  messageHash: string;
 | 
						|
  sentAt: number;
 | 
						|
}) {
 | 
						|
  const now = Date.now();
 | 
						|
  return {
 | 
						|
    sent_at: sentAt,
 | 
						|
    received_at: now,
 | 
						|
    conversationId,
 | 
						|
    messageHash,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * This function is only called when we get a message from ourself from a swarm polling event.
 | 
						|
 *
 | 
						|
 * NOTE: conversationId has to be the conversation in which this message should be added. So
 | 
						|
 * either syncTarget, groupId or envelope.source or senderIdentity
 | 
						|
 */
 | 
						|
export function createSwarmMessageSentFromUs(args: {
 | 
						|
  messageHash: string;
 | 
						|
  sentAt: number;
 | 
						|
  conversationId: string;
 | 
						|
}): MessageModel {
 | 
						|
  // for messages we did send, we mark it as read and start the expiration timer
 | 
						|
  const messageData: MessageAttributesOptionals = {
 | 
						|
    ...getSharedAttributesForSwarmMessage(args),
 | 
						|
    ...getSharedAttributesForOutgoingMessage(),
 | 
						|
  };
 | 
						|
 | 
						|
  return new MessageModel(messageData);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * This function is only called by the Receiver when we get a message
 | 
						|
 *  from someone else than ourself from a swarm polling event
 | 
						|
 * NOTE: conversationId has to be the conversation in which this message should be added. So
 | 
						|
 * either syncTarget, groupId or envelope.source or senderIdentity
 | 
						|
 */
 | 
						|
export function createSwarmMessageSentFromNotUs(args: {
 | 
						|
  messageHash: string;
 | 
						|
  sentAt: number;
 | 
						|
  sender: string;
 | 
						|
  conversationId: string;
 | 
						|
}): MessageModel {
 | 
						|
  const messageData: MessageAttributesOptionals = {
 | 
						|
    ...getSharedAttributesForSwarmMessage(args),
 | 
						|
    ...getSharedAttributesForIncomingMessage(),
 | 
						|
    source: args.sender,
 | 
						|
  };
 | 
						|
 | 
						|
  return new MessageModel(messageData);
 | 
						|
}
 | 
						|
 | 
						|
function getSharedAttributesForPublicMessage({
 | 
						|
  serverTimestamp,
 | 
						|
  serverId,
 | 
						|
  conversationId,
 | 
						|
}: {
 | 
						|
  serverId: number;
 | 
						|
  serverTimestamp: number;
 | 
						|
  conversationId: string;
 | 
						|
}) {
 | 
						|
  return {
 | 
						|
    serverTimestamp: serverTimestamp || undefined,
 | 
						|
    serverId: serverId || undefined,
 | 
						|
    sent_at: serverTimestamp,
 | 
						|
    received_at: serverTimestamp,
 | 
						|
    isPublic: true,
 | 
						|
    conversationId,
 | 
						|
    messageHash: '', // we do not care of a messageHash for an opengroup message. we have serverId for that
 | 
						|
    // TODO do we need to worry about this?
 | 
						|
    expirationStartTimestamp: undefined,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
function getSharedAttributesForOutgoingMessage() {
 | 
						|
  return {
 | 
						|
    source: UserUtils.getOurPubKeyStrFromCache(),
 | 
						|
    unread: 0,
 | 
						|
    sent_to: [],
 | 
						|
    sent: true,
 | 
						|
    type: 'outgoing' as MessageModelType,
 | 
						|
    direction: 'outgoing' as MessageModelType,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
function getSharedAttributesForIncomingMessage() {
 | 
						|
  return {
 | 
						|
    unread: 1,
 | 
						|
    type: 'incoming' as MessageModelType,
 | 
						|
    direction: 'incoming' as MessageModelType,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * This function is only called when we get a message from ourself from an opengroup polling event
 | 
						|
 */
 | 
						|
export function createPublicMessageSentFromUs(args: {
 | 
						|
  serverId: number;
 | 
						|
  serverTimestamp: number;
 | 
						|
  conversationId: string;
 | 
						|
}): MessageModel {
 | 
						|
  const messageData: MessageAttributesOptionals = {
 | 
						|
    ...getSharedAttributesForPublicMessage(args),
 | 
						|
    ...getSharedAttributesForOutgoingMessage(),
 | 
						|
  };
 | 
						|
 | 
						|
  return new MessageModel(messageData);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * This function is only called by the Receiver when we get a message
 | 
						|
 *  from someone else than ourself from an opengroup polling event
 | 
						|
 */
 | 
						|
export function createPublicMessageSentFromNotUs(args: {
 | 
						|
  serverId: number;
 | 
						|
  sender: string;
 | 
						|
  serverTimestamp: number;
 | 
						|
  conversationId: string;
 | 
						|
}): MessageModel {
 | 
						|
  const messageData: MessageAttributesOptionals = {
 | 
						|
    ...getSharedAttributesForPublicMessage(args),
 | 
						|
    ...getSharedAttributesForIncomingMessage(),
 | 
						|
    source: args.sender,
 | 
						|
  };
 | 
						|
 | 
						|
  return new MessageModel(messageData);
 | 
						|
}
 |