theluyuan 38ba663466
Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
init
2025-09-02 14:49:16 +08:00

68 lines
2.0 KiB
TypeScript

import { IStore } from '../../app/types';
import JitsiMeetJS from '../lib-jitsi-meet';
import { SET_PRECALL_TEST_RESULTS, SET_UNSAFE_ROOM_CONSENT } from './actionTypes';
import { getPreCallICEUrl } from './functions';
import logger from './logger';
import { IPreCallResult, IPreCallTestState, PreCallTestStatus } from './types';
/**
* Sets the consent of the user for joining the unsafe room.
*
* @param {boolean} consent - The user's consent.
* @returns {{
* type: SET_UNSAFE_ROOM_CONSENT,
* consent: boolean
* }}
*/
export function setUnsafeRoomConsent(consent: boolean) {
return {
type: SET_UNSAFE_ROOM_CONSENT,
consent
};
}
/**
* Initializes the 'precallTest' and executes one test, storing the results.
*
* @returns {Function}
*/
export function runPreCallTest() {
return async function(dispatch: Function, getState: IStore['getState']) {
try {
dispatch(setPreCallTestResults({ status: PreCallTestStatus.RUNNING }));
const turnCredentialsUrl = getPreCallICEUrl(getState());
if (!turnCredentialsUrl) {
throw new Error('No TURN credentials URL provided in config');
}
const turnCredentials = await fetch(turnCredentialsUrl);
const { iceServers } = await turnCredentials.json();
const result: IPreCallResult = await JitsiMeetJS.runPreCallTest(iceServers);
dispatch(setPreCallTestResults({ status: PreCallTestStatus.FINISHED,
result }));
} catch (error) {
logger.error('Failed to run pre-call test', error);
dispatch(setPreCallTestResults({ status: PreCallTestStatus.FAILED }));
}
};
}
/**
* Action used to set data from precall test.
*
* @param {IPreCallTestState} value - The precall test results.
* @returns {Object}
*/
export function setPreCallTestResults(value: IPreCallTestState) {
return {
type: SET_PRECALL_TEST_RESULTS,
value
};
}