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.
		
		
		
		
		
			
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
| 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;
 | |
| };
 |