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.
session-desktop/ts/session/apis/open_group_api/opengroupV2/ApiUtil.ts

87 lines
2.5 KiB
TypeScript

import _ from 'lodash';
import { allowOnlyOneAtATime } from '../../../utils/Promise';
import {
updateDefaultRooms,
updateDefaultRoomsInProgress,
} from '../../../../state/ducks/defaultRooms';
import { getCompleteUrlFromRoom } from '../utils/OpenGroupUtils';
import { parseOpenGroupV2 } from './JoinOpenGroupV2';
import { getAllRoomInfos } from '../sogsv3/sogsV3RoomInfos';
export type OpenGroupRequestCommonType = {
serverUrl: string;
roomId: string;
};
export type OpenGroupCapabilityRequest = {
server: string;
endpoint: string;
serverPubKey: string;
headers: Record<string, string | number>;
method: string;
useV4: boolean;
};
export type OpenGroupV2Info = {
id: string;
name: string;
imageId?: string;
capabilities?: Array<string>;
};
export type OpenGroupV2InfoJoinable = OpenGroupV2Info & {
completeUrl: string;
base64Data?: string;
};
// tslint:disable: no-http-string
const defaultServerUrl = 'http://116.203.70.33';
const defaultServerPublicKey = 'a03c383cf63c3c4efe67acc52112a6dd734b3a946b9545f488aaa93da7991238';
const defaultRoom = `${defaultServerUrl}/main?public_key=${defaultServerPublicKey}`;
const loadDefaultRoomsSingle = () =>
allowOnlyOneAtATime(
'loadDefaultRoomsSingle',
async (): Promise<Array<OpenGroupV2InfoJoinable>> => {
const roomInfos = parseOpenGroupV2(defaultRoom);
if (roomInfos) {
try {
const roomsGot = await getAllRoomInfos(roomInfos);
if (!roomsGot) {
return [];
}
return roomsGot.map(room => {
return {
...room,
completeUrl: getCompleteUrlFromRoom({
serverUrl: roomInfos.serverUrl,
serverPublicKey: roomInfos.serverPublicKey,
roomId: room.id,
}),
};
});
} catch (e) {
window?.log?.warn('loadDefaultRoomloadDefaultRoomssIfNeeded failed', e);
}
return [];
}
return [];
}
);
/**
* Load to the cache all the details of the room of the default opengroupv2 server
* This call will only run once at a time.
*/
export const loadDefaultRooms = async () => {
window.inboxStore?.dispatch(updateDefaultRoomsInProgress(true));
const allRooms: Array<OpenGroupV2InfoJoinable> = await loadDefaultRoomsSingle();
window.inboxStore?.dispatch(updateDefaultRoomsInProgress(false));
if (allRooms !== undefined) {
window.inboxStore?.dispatch(updateDefaultRooms(allRooms));
}
};