You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-07 23:02:56 +03:00
Add more access modifiers
This commit is contained in:
@@ -84,18 +84,18 @@ export const USERMEDIA_STREAM_ID = "mock_stream_from_media_handler";
|
|||||||
export const SCREENSHARE_STREAM_ID = "mock_screen_stream_from_media_handler";
|
export const SCREENSHARE_STREAM_ID = "mock_screen_stream_from_media_handler";
|
||||||
|
|
||||||
class MockMediaStreamAudioSourceNode {
|
class MockMediaStreamAudioSourceNode {
|
||||||
connect() {}
|
public connect() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MockAnalyser {
|
class MockAnalyser {
|
||||||
getFloatFrequencyData() { return 0.0; }
|
public getFloatFrequencyData() { return 0.0; }
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockAudioContext {
|
export class MockAudioContext {
|
||||||
constructor() {}
|
constructor() {}
|
||||||
createAnalyser() { return new MockAnalyser(); }
|
public createAnalyser() { return new MockAnalyser(); }
|
||||||
createMediaStreamSource() { return new MockMediaStreamAudioSourceNode(); }
|
public createMediaStreamSource() { return new MockMediaStreamAudioSourceNode(); }
|
||||||
close() {}
|
public close() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockRTCPeerConnection {
|
export class MockRTCPeerConnection {
|
||||||
@@ -107,8 +107,8 @@ export class MockRTCPeerConnection {
|
|||||||
public needsNegotiation = false;
|
public needsNegotiation = false;
|
||||||
public readyToNegotiate: Promise<void>;
|
public readyToNegotiate: Promise<void>;
|
||||||
private onReadyToNegotiate?: () => void;
|
private onReadyToNegotiate?: () => void;
|
||||||
localDescription: RTCSessionDescription;
|
public localDescription: RTCSessionDescription;
|
||||||
signalingState: RTCSignalingState = "stable";
|
public signalingState: RTCSignalingState = "stable";
|
||||||
public transceivers: MockRTCRtpTransceiver[] = [];
|
public transceivers: MockRTCRtpTransceiver[] = [];
|
||||||
|
|
||||||
public static triggerAllNegotiations(): void {
|
public static triggerAllNegotiations(): void {
|
||||||
@@ -139,7 +139,7 @@ export class MockRTCPeerConnection {
|
|||||||
MockRTCPeerConnection.instances.push(this);
|
MockRTCPeerConnection.instances.push(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
addEventListener(type: string, listener: () => void) {
|
public addEventListener(type: string, listener: () => void) {
|
||||||
if (type === 'negotiationneeded') {
|
if (type === 'negotiationneeded') {
|
||||||
this.negotiationNeededListener = listener;
|
this.negotiationNeededListener = listener;
|
||||||
} else if (type == 'icecandidate') {
|
} else if (type == 'icecandidate') {
|
||||||
@@ -148,28 +148,28 @@ export class MockRTCPeerConnection {
|
|||||||
this.onTrackListener = listener;
|
this.onTrackListener = listener;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createDataChannel(label: string, opts: RTCDataChannelInit) { return { label, ...opts }; }
|
public createDataChannel(label: string, opts: RTCDataChannelInit) { return { label, ...opts }; }
|
||||||
createOffer() {
|
public createOffer() {
|
||||||
return Promise.resolve({
|
return Promise.resolve({
|
||||||
type: 'offer',
|
type: 'offer',
|
||||||
sdp: DUMMY_SDP,
|
sdp: DUMMY_SDP,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
createAnswer() {
|
public createAnswer() {
|
||||||
return Promise.resolve({
|
return Promise.resolve({
|
||||||
type: 'answer',
|
type: 'answer',
|
||||||
sdp: DUMMY_SDP,
|
sdp: DUMMY_SDP,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
setRemoteDescription() {
|
public setRemoteDescription() {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
setLocalDescription() {
|
public setLocalDescription() {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
close() { }
|
public close() { }
|
||||||
getStats() { return []; }
|
public getStats() { return []; }
|
||||||
addTransceiver(track: MockMediaStreamTrack): MockRTCRtpTransceiver {
|
public addTransceiver(track: MockMediaStreamTrack): MockRTCRtpTransceiver {
|
||||||
this.needsNegotiation = true;
|
this.needsNegotiation = true;
|
||||||
if (this.onReadyToNegotiate) this.onReadyToNegotiate();
|
if (this.onReadyToNegotiate) this.onReadyToNegotiate();
|
||||||
|
|
||||||
@@ -184,19 +184,21 @@ export class MockRTCPeerConnection {
|
|||||||
|
|
||||||
return newTransceiver;
|
return newTransceiver;
|
||||||
}
|
}
|
||||||
addTrack(track: MockMediaStreamTrack): MockRTCRtpSender {
|
public addTrack(track: MockMediaStreamTrack): MockRTCRtpSender {
|
||||||
return this.addTransceiver(track).sender as unknown as MockRTCRtpSender;
|
return this.addTransceiver(track).sender as unknown as MockRTCRtpSender;
|
||||||
}
|
}
|
||||||
|
|
||||||
removeTrack() {
|
public removeTrack() {
|
||||||
this.needsNegotiation = true;
|
this.needsNegotiation = true;
|
||||||
if (this.onReadyToNegotiate) this.onReadyToNegotiate();
|
if (this.onReadyToNegotiate) this.onReadyToNegotiate();
|
||||||
}
|
}
|
||||||
|
|
||||||
getTransceivers(): MockRTCRtpTransceiver[] { return this.transceivers; }
|
public getTransceivers(): MockRTCRtpTransceiver[] { return this.transceivers; }
|
||||||
getSenders(): MockRTCRtpSender[] { return this.transceivers.map(t => t.sender as unknown as MockRTCRtpSender); }
|
public getSenders(): MockRTCRtpSender[] {
|
||||||
|
return this.transceivers.map(t => t.sender as unknown as MockRTCRtpSender);
|
||||||
|
}
|
||||||
|
|
||||||
doNegotiation() {
|
public doNegotiation() {
|
||||||
if (this.needsNegotiation && this.negotiationNeededListener) {
|
if (this.needsNegotiation && this.negotiationNeededListener) {
|
||||||
this.needsNegotiation = false;
|
this.needsNegotiation = false;
|
||||||
this.negotiationNeededListener();
|
this.negotiationNeededListener();
|
||||||
@@ -207,7 +209,7 @@ export class MockRTCPeerConnection {
|
|||||||
export class MockRTCRtpSender {
|
export class MockRTCRtpSender {
|
||||||
constructor(public track: MockMediaStreamTrack) { }
|
constructor(public track: MockMediaStreamTrack) { }
|
||||||
|
|
||||||
replaceTrack(track: MockMediaStreamTrack) { this.track = track; }
|
public replaceTrack(track: MockMediaStreamTrack) { this.track = track; }
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockRTCRtpReceiver {
|
export class MockRTCRtpReceiver {
|
||||||
@@ -224,38 +226,38 @@ export class MockRTCRtpTransceiver {
|
|||||||
this.peerConn.needsNegotiation = true;
|
this.peerConn.needsNegotiation = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setCodecPreferences = jest.fn<void, RTCRtpCodecCapability[]>();
|
public setCodecPreferences = jest.fn<void, RTCRtpCodecCapability[]>();
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockMediaStreamTrack {
|
export class MockMediaStreamTrack {
|
||||||
constructor(public readonly id: string, public readonly kind: "audio" | "video", public enabled = true) { }
|
constructor(public readonly id: string, public readonly kind: "audio" | "video", public enabled = true) { }
|
||||||
|
|
||||||
stop = jest.fn<void, []>();
|
public stop = jest.fn<void, []>();
|
||||||
|
|
||||||
listeners: [string, (...args: any[]) => any][] = [];
|
public listeners: [string, (...args: any[]) => any][] = [];
|
||||||
public isStopped = false;
|
public isStopped = false;
|
||||||
public settings?: MediaTrackSettings;
|
public settings?: MediaTrackSettings;
|
||||||
|
|
||||||
getSettings(): MediaTrackSettings { return this.settings!; }
|
public getSettings(): MediaTrackSettings { return this.settings!; }
|
||||||
|
|
||||||
// XXX: Using EventTarget in jest doesn't seem to work, so we write our own
|
// XXX: Using EventTarget in jest doesn't seem to work, so we write our own
|
||||||
// implementation
|
// implementation
|
||||||
dispatchEvent(eventType: string) {
|
public dispatchEvent(eventType: string) {
|
||||||
this.listeners.forEach(([t, c]) => {
|
this.listeners.forEach(([t, c]) => {
|
||||||
if (t !== eventType) return;
|
if (t !== eventType) return;
|
||||||
c();
|
c();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
addEventListener(eventType: string, callback: (...args: any[]) => any) {
|
public addEventListener(eventType: string, callback: (...args: any[]) => any) {
|
||||||
this.listeners.push([eventType, callback]);
|
this.listeners.push([eventType, callback]);
|
||||||
}
|
}
|
||||||
removeEventListener(eventType: string, callback: (...args: any[]) => any) {
|
public removeEventListener(eventType: string, callback: (...args: any[]) => any) {
|
||||||
this.listeners.filter(([t, c]) => {
|
this.listeners.filter(([t, c]) => {
|
||||||
return t !== eventType || c !== callback;
|
return t !== eventType || c !== callback;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
typed(): MediaStreamTrack { return this as unknown as MediaStreamTrack; }
|
public typed(): MediaStreamTrack { return this as unknown as MediaStreamTrack; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: Using EventTarget in jest doesn't seem to work, so we write our own
|
// XXX: Using EventTarget in jest doesn't seem to work, so we write our own
|
||||||
@@ -266,42 +268,42 @@ export class MockMediaStream {
|
|||||||
private tracks: MockMediaStreamTrack[] = [],
|
private tracks: MockMediaStreamTrack[] = [],
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
listeners: [string, (...args: any[]) => any][] = [];
|
public listeners: [string, (...args: any[]) => any][] = [];
|
||||||
public isStopped = false;
|
public isStopped = false;
|
||||||
|
|
||||||
dispatchEvent(eventType: string) {
|
public dispatchEvent(eventType: string) {
|
||||||
this.listeners.forEach(([t, c]) => {
|
this.listeners.forEach(([t, c]) => {
|
||||||
if (t !== eventType) return;
|
if (t !== eventType) return;
|
||||||
c();
|
c();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
getTracks() { return this.tracks; }
|
public getTracks() { return this.tracks; }
|
||||||
getAudioTracks() { return this.tracks.filter((track) => track.kind === "audio"); }
|
public getAudioTracks() { return this.tracks.filter((track) => track.kind === "audio"); }
|
||||||
getVideoTracks() { return this.tracks.filter((track) => track.kind === "video"); }
|
public getVideoTracks() { return this.tracks.filter((track) => track.kind === "video"); }
|
||||||
addEventListener(eventType: string, callback: (...args: any[]) => any) {
|
public addEventListener(eventType: string, callback: (...args: any[]) => any) {
|
||||||
this.listeners.push([eventType, callback]);
|
this.listeners.push([eventType, callback]);
|
||||||
}
|
}
|
||||||
removeEventListener(eventType: string, callback: (...args: any[]) => any) {
|
public removeEventListener(eventType: string, callback: (...args: any[]) => any) {
|
||||||
this.listeners.filter(([t, c]) => {
|
this.listeners.filter(([t, c]) => {
|
||||||
return t !== eventType || c !== callback;
|
return t !== eventType || c !== callback;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
addTrack(track: MockMediaStreamTrack) {
|
public addTrack(track: MockMediaStreamTrack) {
|
||||||
this.tracks.push(track);
|
this.tracks.push(track);
|
||||||
this.dispatchEvent("addtrack");
|
this.dispatchEvent("addtrack");
|
||||||
}
|
}
|
||||||
removeTrack(track: MockMediaStreamTrack) { this.tracks.splice(this.tracks.indexOf(track), 1); }
|
public removeTrack(track: MockMediaStreamTrack) { this.tracks.splice(this.tracks.indexOf(track), 1); }
|
||||||
|
|
||||||
clone(): MediaStream {
|
public clone(): MediaStream {
|
||||||
return new MockMediaStream(this.id + ".clone", this.tracks).typed();
|
return new MockMediaStream(this.id + ".clone", this.tracks).typed();
|
||||||
}
|
}
|
||||||
|
|
||||||
isCloneOf(stream: MediaStream) {
|
public isCloneOf(stream: MediaStream) {
|
||||||
return this.id === stream.id + ".clone";
|
return this.id === stream.id + ".clone";
|
||||||
}
|
}
|
||||||
|
|
||||||
// syntactic sugar for typing
|
// syntactic sugar for typing
|
||||||
typed(): MediaStream {
|
public typed(): MediaStream {
|
||||||
return this as unknown as MediaStream;
|
return this as unknown as MediaStream;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -311,14 +313,14 @@ export class MockMediaDeviceInfo {
|
|||||||
public kind: "audioinput" | "videoinput" | "audiooutput",
|
public kind: "audioinput" | "videoinput" | "audiooutput",
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
typed(): MediaDeviceInfo { return this as unknown as MediaDeviceInfo; }
|
public typed(): MediaDeviceInfo { return this as unknown as MediaDeviceInfo; }
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockMediaHandler {
|
export class MockMediaHandler {
|
||||||
public userMediaStreams: MockMediaStream[] = [];
|
public userMediaStreams: MockMediaStream[] = [];
|
||||||
public screensharingStreams: MockMediaStream[] = [];
|
public screensharingStreams: MockMediaStream[] = [];
|
||||||
|
|
||||||
getUserMediaStream(audio: boolean, video: boolean) {
|
public getUserMediaStream(audio: boolean, video: boolean) {
|
||||||
const tracks: MockMediaStreamTrack[] = [];
|
const tracks: MockMediaStreamTrack[] = [];
|
||||||
if (audio) tracks.push(new MockMediaStreamTrack("usermedia_audio_track", "audio"));
|
if (audio) tracks.push(new MockMediaStreamTrack("usermedia_audio_track", "audio"));
|
||||||
if (video) tracks.push(new MockMediaStreamTrack("usermedia_video_track", "video"));
|
if (video) tracks.push(new MockMediaStreamTrack("usermedia_video_track", "video"));
|
||||||
@@ -327,10 +329,10 @@ export class MockMediaHandler {
|
|||||||
this.userMediaStreams.push(stream);
|
this.userMediaStreams.push(stream);
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
stopUserMediaStream(stream: MockMediaStream) {
|
public stopUserMediaStream(stream: MockMediaStream) {
|
||||||
stream.isStopped = true;
|
stream.isStopped = true;
|
||||||
}
|
}
|
||||||
getScreensharingStream = jest.fn((opts?: IScreensharingOpts) => {
|
public getScreensharingStream = jest.fn((opts?: IScreensharingOpts) => {
|
||||||
const tracks = [new MockMediaStreamTrack("screenshare_video_track", "video")];
|
const tracks = [new MockMediaStreamTrack("screenshare_video_track", "video")];
|
||||||
if (opts?.audio) tracks.push(new MockMediaStreamTrack("screenshare_audio_track", "audio"));
|
if (opts?.audio) tracks.push(new MockMediaStreamTrack("screenshare_audio_track", "audio"));
|
||||||
|
|
||||||
@@ -338,31 +340,31 @@ export class MockMediaHandler {
|
|||||||
this.screensharingStreams.push(stream);
|
this.screensharingStreams.push(stream);
|
||||||
return stream;
|
return stream;
|
||||||
});
|
});
|
||||||
stopScreensharingStream(stream: MockMediaStream) {
|
public stopScreensharingStream(stream: MockMediaStream) {
|
||||||
stream.isStopped = true;
|
stream.isStopped = true;
|
||||||
}
|
}
|
||||||
hasAudioDevice() { return true; }
|
public hasAudioDevice() { return true; }
|
||||||
hasVideoDevice() { return true; }
|
public hasVideoDevice() { return true; }
|
||||||
stopAllStreams() {}
|
public stopAllStreams() {}
|
||||||
|
|
||||||
typed(): MediaHandler { return this as unknown as MediaHandler; }
|
public typed(): MediaHandler { return this as unknown as MediaHandler; }
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockMediaDevices {
|
export class MockMediaDevices {
|
||||||
enumerateDevices = jest.fn<Promise<MediaDeviceInfo[]>, []>().mockResolvedValue([
|
public enumerateDevices = jest.fn<Promise<MediaDeviceInfo[]>, []>().mockResolvedValue([
|
||||||
new MockMediaDeviceInfo("audioinput").typed(),
|
new MockMediaDeviceInfo("audioinput").typed(),
|
||||||
new MockMediaDeviceInfo("videoinput").typed(),
|
new MockMediaDeviceInfo("videoinput").typed(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
getUserMedia = jest.fn<Promise<MediaStream>, [MediaStreamConstraints]>().mockReturnValue(
|
public getUserMedia = jest.fn<Promise<MediaStream>, [MediaStreamConstraints]>().mockReturnValue(
|
||||||
Promise.resolve(new MockMediaStream("local_stream").typed()),
|
Promise.resolve(new MockMediaStream("local_stream").typed()),
|
||||||
);
|
);
|
||||||
|
|
||||||
getDisplayMedia = jest.fn<Promise<MediaStream>, [DisplayMediaStreamConstraints]>().mockReturnValue(
|
public getDisplayMedia = jest.fn<Promise<MediaStream>, [DisplayMediaStreamConstraints]>().mockReturnValue(
|
||||||
Promise.resolve(new MockMediaStream("local_display_stream").typed()),
|
Promise.resolve(new MockMediaStream("local_display_stream").typed()),
|
||||||
);
|
);
|
||||||
|
|
||||||
typed(): MediaDevices { return this as unknown as MediaDevices; }
|
public typed(): MediaDevices { return this as unknown as MediaDevices; }
|
||||||
}
|
}
|
||||||
|
|
||||||
type EmittedEvents = CallEventHandlerEvent | CallEvent | ClientEvent | RoomStateEvent | GroupCallEventHandlerEvent;
|
type EmittedEvents = CallEventHandlerEvent | CallEvent | ClientEvent | RoomStateEvent | GroupCallEventHandlerEvent;
|
||||||
@@ -379,44 +381,44 @@ export class MockCallMatrixClient extends TypedEventEmitter<EmittedEvents, Emitt
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
groupCallEventHandler = {
|
public groupCallEventHandler = {
|
||||||
groupCalls: new Map<string, GroupCall>(),
|
groupCalls: new Map<string, GroupCall>(),
|
||||||
};
|
};
|
||||||
|
|
||||||
callEventHandler = {
|
public callEventHandler = {
|
||||||
calls: new Map<string, MatrixCall>(),
|
calls: new Map<string, MatrixCall>(),
|
||||||
};
|
};
|
||||||
|
|
||||||
sendStateEvent = jest.fn<Promise<ISendEventResponse>, [
|
public sendStateEvent = jest.fn<Promise<ISendEventResponse>, [
|
||||||
roomId: string, eventType: EventType, content: any, statekey: string,
|
roomId: string, eventType: EventType, content: any, statekey: string,
|
||||||
]>();
|
]>();
|
||||||
sendToDevice = jest.fn<Promise<{}>, [
|
public sendToDevice = jest.fn<Promise<{}>, [
|
||||||
eventType: string,
|
eventType: string,
|
||||||
contentMap: { [userId: string]: { [deviceId: string]: Record<string, any> } },
|
contentMap: { [userId: string]: { [deviceId: string]: Record<string, any> } },
|
||||||
txnId?: string,
|
txnId?: string,
|
||||||
]>();
|
]>();
|
||||||
|
|
||||||
getMediaHandler(): MediaHandler { return this.mediaHandler.typed(); }
|
public getMediaHandler(): MediaHandler { return this.mediaHandler.typed(); }
|
||||||
|
|
||||||
getUserId(): string { return this.userId; }
|
public getUserId(): string { return this.userId; }
|
||||||
|
|
||||||
getDeviceId(): string { return this.deviceId; }
|
public getDeviceId(): string { return this.deviceId; }
|
||||||
getSessionId(): string { return this.sessionId; }
|
public getSessionId(): string { return this.sessionId; }
|
||||||
|
|
||||||
getTurnServers = () => [];
|
public getTurnServers = () => [];
|
||||||
isFallbackICEServerAllowed = () => false;
|
public isFallbackICEServerAllowed = () => false;
|
||||||
reEmitter = new ReEmitter(new TypedEventEmitter());
|
public reEmitter = new ReEmitter(new TypedEventEmitter());
|
||||||
getUseE2eForGroupCall = () => false;
|
public getUseE2eForGroupCall = () => false;
|
||||||
checkTurnServers = () => null;
|
public checkTurnServers = () => null;
|
||||||
|
|
||||||
getSyncState = jest.fn<SyncState | null, []>().mockReturnValue(SyncState.Syncing);
|
public getSyncState = jest.fn<SyncState | null, []>().mockReturnValue(SyncState.Syncing);
|
||||||
|
|
||||||
getRooms = jest.fn<Room[], []>().mockReturnValue([]);
|
public getRooms = jest.fn<Room[], []>().mockReturnValue([]);
|
||||||
getRoom = jest.fn();
|
public getRoom = jest.fn();
|
||||||
|
|
||||||
typed(): MatrixClient { return this as unknown as MatrixClient; }
|
public typed(): MatrixClient { return this as unknown as MatrixClient; }
|
||||||
|
|
||||||
emitRoomState(event: MatrixEvent, state: RoomState): void {
|
public emitRoomState(event: MatrixEvent, state: RoomState): void {
|
||||||
this.emit(
|
this.emit(
|
||||||
RoomStateEvent.Events,
|
RoomStateEvent.Events,
|
||||||
event,
|
event,
|
||||||
@@ -432,10 +434,10 @@ export class MockCallFeed {
|
|||||||
public stream: MockMediaStream,
|
public stream: MockMediaStream,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
measureVolumeActivity(val: boolean) {}
|
public measureVolumeActivity(val: boolean) {}
|
||||||
dispose() {}
|
public dispose() {}
|
||||||
|
|
||||||
typed(): CallFeed {
|
public typed(): CallFeed {
|
||||||
return this as unknown as CallFeed;
|
return this as unknown as CallFeed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -125,16 +125,16 @@ class MockCall {
|
|||||||
|
|
||||||
public sendMetadataUpdate = jest.fn<void, []>();
|
public sendMetadataUpdate = jest.fn<void, []>();
|
||||||
|
|
||||||
on = jest.fn();
|
public on = jest.fn();
|
||||||
removeListener = jest.fn();
|
public removeListener = jest.fn();
|
||||||
|
|
||||||
getOpponentMember(): Partial<RoomMember> {
|
public getOpponentMember(): Partial<RoomMember> {
|
||||||
return {
|
return {
|
||||||
userId: this.opponentUserId,
|
userId: this.opponentUserId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
typed(): MatrixCall { return this as unknown as MatrixCall; }
|
public typed(): MatrixCall { return this as unknown as MatrixCall; }
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Group Call', function() {
|
describe('Group Call', function() {
|
||||||
|
@@ -71,7 +71,7 @@ export enum GroupCallErrorCode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class GroupCallError extends Error {
|
export class GroupCallError extends Error {
|
||||||
code: string;
|
public code: string;
|
||||||
|
|
||||||
constructor(code: GroupCallErrorCode, msg: string, err?: Error) {
|
constructor(code: GroupCallErrorCode, msg: string, err?: Error) {
|
||||||
// Still don't think there's any way to have proper nested errors
|
// Still don't think there's any way to have proper nested errors
|
||||||
|
Reference in New Issue
Block a user