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.
		
		
		
		
		
			
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
| import { SignalService } from '../../../../protobuf';
 | |
| import { TTL_DEFAULT } from '../../../constants';
 | |
| import { PubKey } from '../../../types';
 | |
| import { StringUtils } from '../../../utils';
 | |
| import { DataMessage } from '../DataMessage';
 | |
| import { ExpirableMessageParams } from '../ExpirableMessage';
 | |
| 
 | |
| interface ExpirationTimerUpdateMessageParams extends ExpirableMessageParams {
 | |
|   groupId?: string | PubKey;
 | |
|   syncTarget?: string | PubKey;
 | |
| }
 | |
| 
 | |
| // NOTE legacy messages used a data message for the expireTimer.
 | |
| // The new ones use properties on the Content Message
 | |
| 
 | |
| export class ExpirationTimerUpdateMessage extends DataMessage {
 | |
|   public readonly groupId?: PubKey;
 | |
|   public readonly syncTarget?: string;
 | |
| 
 | |
|   constructor(params: ExpirationTimerUpdateMessageParams) {
 | |
|     super({
 | |
|       timestamp: params.timestamp,
 | |
|       identifier: params.identifier,
 | |
|       expirationType: params.expirationType,
 | |
|       expireTimer: params.expireTimer,
 | |
|     });
 | |
| 
 | |
|     const { groupId } = params;
 | |
|     this.groupId = groupId ? PubKey.cast(groupId) : undefined;
 | |
|     this.syncTarget = params.syncTarget ? PubKey.cast(params.syncTarget).key : undefined;
 | |
|   }
 | |
| 
 | |
|   public contentProto(): SignalService.Content {
 | |
|     return new SignalService.Content({
 | |
|       ...super.contentProto(),
 | |
|       dataMessage: this.dataProto(),
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   public dataProto(): SignalService.DataMessage {
 | |
|     const data = super.dataProto();
 | |
| 
 | |
|     data.flags = SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE;
 | |
| 
 | |
|     // TODOLATER we won't need this once legacy groups are not supported anymore
 | |
|     // the envelope stores the groupId for a closed group already.
 | |
|     if (this.groupId) {
 | |
|       const groupMessage = new SignalService.GroupContext();
 | |
|       const groupIdWithPrefix = PubKey.addTextSecurePrefixIfNeeded(this.groupId.key);
 | |
|       const encoded = StringUtils.encode(groupIdWithPrefix, 'utf8');
 | |
|       const id = new Uint8Array(encoded);
 | |
|       groupMessage.id = id;
 | |
|       groupMessage.type = SignalService.GroupContext.Type.DELIVER;
 | |
| 
 | |
|       data.group = groupMessage;
 | |
|     }
 | |
| 
 | |
|     if (this.syncTarget) {
 | |
|       data.syncTarget = this.syncTarget;
 | |
|     }
 | |
| 
 | |
|     return data;
 | |
|   }
 | |
| 
 | |
|   public ttl(): number {
 | |
|     if (this.groupId) {
 | |
|       return TTL_DEFAULT.CONTENT_MESSAGE;
 | |
|     }
 | |
|     return super.ttl();
 | |
|   }
 | |
| }
 |