import  AbortController  from  'abort-controller' ;  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  OpenGroupReactionResponse  }  from  '../../../../types/Reaction' ;  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  Reactions  }  from  '../../../../util/reactions' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  OpenGroupRequestCommonType  }  from  '../opengroupV2/ApiUtil' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  batchFirstSubIsSuccess , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  batchGlobalIsSuccess , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  OpenGroupBatchRow , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  sogsBatchSend , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  from  './sogsV3BatchPoll' ;  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addToMutationCache , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ChangeType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  SogsV3Mutation , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  updateMutationCache , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  from  './sogsV3MutationCache' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  hasReactionSupport  }  from  './sogsV3SendReaction' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Clears  a  reaction  on  open  group  server  using  onion  v4  logic  and  batch  send 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  User  must  have  moderator  permissions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Clearing  implies  removing  all  reactors  for  a  specific  emoji 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  clearSogsReactionByServerId  =  async  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  reaction : string , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  serverId : number , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  roomInfos : OpenGroupRequestCommonType 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								) :  Promise < boolean >  = >  {  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  {  supported ,  conversation  }  =  await  hasReactionSupport ( serverId ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! supported )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! conversation )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    window . log . warn ( ` Conversation for  ${ reaction }  not found in db ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  cacheEntry : SogsV3Mutation  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    server : roomInfos.serverUrl , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    room : roomInfos.roomId , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    changeType : ChangeType.REACTIONS , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    seqno : null , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    metadata :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      messageId : serverId , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      emoji : reaction , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      action :  'CLEAR' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addToMutationCache ( cacheEntry ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Since responses can take a long time we immediately update the moderators's UI and if there is a problem it is overwritten by handleOpenGroupMessageReactions later.
 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  await  Reactions . handleClearReaction ( serverId ,  reaction ) ; 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  options : Array < OpenGroupBatchRow >  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      type :  'deleteReaction' , 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      deleteReaction :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reaction , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        messageId : serverId , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        roomId : roomInfos.roomId , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  result  =  await  sogsBatchSend ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    roomInfos . serverUrl , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    new  Set ( [ roomInfos . roomId ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    new  AbortController ( ) . signal , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    options , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    'batch' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( ! result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  Error ( 'Could not deleteReaction, res is invalid' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  rawMessage  =  ( result . body  &&  ( result . body [ 0 ] . body  as  OpenGroupReactionResponse ) )  ||  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! rawMessage )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  Error ( 'deleteReaction parsing failed' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  try  { 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( batchGlobalIsSuccess ( result )  &&  batchFirstSubIsSuccess ( result ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      updateMutationCache ( cacheEntry ,  rawMessage . seqno ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  catch  ( e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    window ? . log ? . error ( "clearSogsReactionByServerId Can't decode JSON body" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;