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.
		
		
		
		
		
			
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
/* global window, textsecure, libsession, ConversationController */
 | 
						|
/* eslint-disable no-bitwise */
 | 
						|
 | 
						|
// eslint-disable-next-line func-names
 | 
						|
(function() {
 | 
						|
  window.libloki = window.libloki || {};
 | 
						|
 | 
						|
  const DebugFlagsEnum = {
 | 
						|
    GROUP_SYNC_MESSAGES: 1,
 | 
						|
    CONTACT_SYNC_MESSAGES: 2,
 | 
						|
    FALLBACK_MESSAGES: 8,
 | 
						|
    SESSION_BACKGROUND_MESSAGE: 32,
 | 
						|
    GROUP_REQUEST_INFO: 64,
 | 
						|
    // If you add any new flag, be sure it is bitwise safe! (unique and 2 multiples)
 | 
						|
    ALL: 65535,
 | 
						|
  };
 | 
						|
 | 
						|
  const debugFlags = DebugFlagsEnum.ALL;
 | 
						|
 | 
						|
  const debugLogFn = (...args) => {
 | 
						|
    if (window.lokiFeatureFlags.debugMessageLogs) {
 | 
						|
      window.log.warn(...args);
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  function logGroupSync(...args) {
 | 
						|
    if (debugFlags & DebugFlagsEnum.GROUP_SYNC_MESSAGES) {
 | 
						|
      debugLogFn(...args);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  function logGroupRequestInfo(...args) {
 | 
						|
    if (debugFlags & DebugFlagsEnum.GROUP_REQUEST_INFO) {
 | 
						|
      debugLogFn(...args);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  function logContactSync(...args) {
 | 
						|
    if (debugFlags & DebugFlagsEnum.CONTACT_SYNC_MESSAGES) {
 | 
						|
      debugLogFn(...args);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  function logBackgroundMessage(...args) {
 | 
						|
    if (debugFlags & DebugFlagsEnum.SESSION_BACKGROUND_MESSAGE) {
 | 
						|
      debugLogFn(...args);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  async function createContactSyncMessage(sessionContacts) {
 | 
						|
    if (sessionContacts.length === 0) {
 | 
						|
      return null;
 | 
						|
    }
 | 
						|
 | 
						|
    const rawContacts = await Promise.all(
 | 
						|
      sessionContacts.map(async conversation => {
 | 
						|
        const profile = conversation.getLokiProfile();
 | 
						|
        const name = profile
 | 
						|
          ? profile.displayName
 | 
						|
          : conversation.getProfileName();
 | 
						|
        const status = await conversation.safeGetVerified();
 | 
						|
 | 
						|
        return {
 | 
						|
          name,
 | 
						|
          number: conversation.getNumber(),
 | 
						|
          nickname: conversation.getNickname(),
 | 
						|
          blocked: conversation.isBlocked(),
 | 
						|
          expireTimer: conversation.get('expireTimer'),
 | 
						|
          verifiedStatus: status,
 | 
						|
        };
 | 
						|
      })
 | 
						|
    );
 | 
						|
 | 
						|
    return new libsession.Messages.Outgoing.ContactSyncMessage({
 | 
						|
      timestamp: Date.now(),
 | 
						|
      rawContacts,
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  function createGroupSyncMessage(sessionGroup) {
 | 
						|
    // We are getting a single open group here
 | 
						|
 | 
						|
    const rawGroup = {
 | 
						|
      id: sessionGroup.id,
 | 
						|
      name: sessionGroup.get('name'),
 | 
						|
      members: sessionGroup.get('members') || [],
 | 
						|
      blocked: sessionGroup.isBlocked(),
 | 
						|
      expireTimer: sessionGroup.get('expireTimer'),
 | 
						|
      admins: sessionGroup.get('groupAdmins') || [],
 | 
						|
    };
 | 
						|
 | 
						|
    return new libsession.Messages.Outgoing.ClosedGroupSyncMessage({
 | 
						|
      timestamp: Date.now(),
 | 
						|
      rawGroup,
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  async function sendSessionRequestsToMembers(members = []) {
 | 
						|
    // For every member, trigger a session request if needed
 | 
						|
    members.forEach(async memberStr => {
 | 
						|
      const ourPubKey = textsecure.storage.user.getNumber();
 | 
						|
      if (memberStr !== ourPubKey) {
 | 
						|
        const memberPubkey = new libsession.Types.PubKey(memberStr);
 | 
						|
        await ConversationController.getOrCreateAndWait(memberStr, 'private');
 | 
						|
        await libsession.Protocols.SessionProtocol.sendSessionRequestIfNeeded(
 | 
						|
          memberPubkey
 | 
						|
        );
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  const debug = {
 | 
						|
    logContactSync,
 | 
						|
    logGroupSync,
 | 
						|
    logBackgroundMessage,
 | 
						|
    logGroupRequestInfo,
 | 
						|
  };
 | 
						|
 | 
						|
  window.libloki.api = {
 | 
						|
    sendSessionRequestsToMembers,
 | 
						|
    createContactSyncMessage,
 | 
						|
    createGroupSyncMessage,
 | 
						|
    debug,
 | 
						|
  };
 | 
						|
})();
 |