import  {  findIndex  }  from  'lodash' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  OpenGroupData  }  from  '../../../../data/opengroups' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  DecodedResponseBodiesV4  }  from  '../../../onions/onionv4' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  BatchSogsReponse ,  OpenGroupBatchRow  }  from  './sogsV3BatchPoll' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  parseCapabilities  }  from  './sogsV3Capabilities' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @param  subrequestOptionsLookup  list  of  subrequests  used  for  the  batch  request  ( order  sensitive ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @param  batchPollResults  The  result  from  the  batch  request  ( order  sensitive ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  getCapabilitiesFromBatch  =  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  subrequestOptionsLookup : Array < OpenGroupBatchRow > , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bodies : DecodedResponseBodiesV4 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								) :  Array < string >  |  null  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  capabilitiesBatchIndex  =  findIndex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subrequestOptionsLookup , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( subrequest : OpenGroupBatchRow )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  subrequest . type  ===  'capabilities' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  capabilities : Array < string >  |  null  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    parseCapabilities ( bodies ? . [ capabilitiesBatchIndex ] ? . body )  ||  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  capabilities ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** using this as explicit way to ensure order  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  handleCapabilities  =  async  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  subrequestOptionsLookup : Array < OpenGroupBatchRow > , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  batchPollResults : BatchSogsReponse , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  serverUrl : string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // roomId: string
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								) :  Promise < null  |  Array < string > >  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! batchPollResults . body )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  capabilities  =  getCapabilitiesFromBatch ( subrequestOptionsLookup ,  batchPollResults . body ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! capabilities )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    window ? . log ? . error ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Failed capabilities subrequest - cancelling capabilities response handling' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // get all v2OpenGroup rooms with the matching serverUrl and set the capabilities.
 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // TODOLATER: capabilities are shared accross a server, not a room. We should probably move this to the server but we do not a server level currently, just rooms
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  rooms  =  OpenGroupData . getV2OpenGroupRoomsByServerUrl ( serverUrl ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! rooms  ||  ! rooms . length )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    window ? . log ? . error ( 'handleCapabilities - Found no groups with matching server url' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  updatedRooms  =  rooms . map ( r  = >  ( {  . . . r ,  capabilities  } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  OpenGroupData . saveV2OpenGroupRooms ( updatedRooms ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  capabilities ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;