You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-23 17:02:25 +03:00
@@ -102,12 +102,12 @@ describe("MatrixRTCSession", () => {
|
|||||||
if (testConfig.listenForMemberStateEvents) {
|
if (testConfig.listenForMemberStateEvents) {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line jest/no-conditional-expect
|
||||||
expect(() => {
|
expect(() => {
|
||||||
MatrixRTCSession.sessionForRoom(client, mockRoom, callSession, testConfig);
|
MatrixRTCSession.sessionForSlot(client, mockRoom, callSession, testConfig);
|
||||||
}).toThrow();
|
}).toThrow();
|
||||||
} else {
|
} else {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line jest/no-conditional-expect
|
||||||
expect(() => {
|
expect(() => {
|
||||||
MatrixRTCSession.sessionForRoom(client, mockRoom, callSession, testConfig);
|
MatrixRTCSession.sessionForSlot(client, mockRoom, callSession, testConfig);
|
||||||
}).not.toThrow();
|
}).not.toThrow();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -115,19 +115,19 @@ describe("MatrixRTCSession", () => {
|
|||||||
it("creates a room-scoped session from room state", () => {
|
it("creates a room-scoped session from room state", () => {
|
||||||
const mockRoom = makeMockRoom([membershipTemplate], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([membershipTemplate], testConfig.testCreateSticky);
|
||||||
|
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
testConfig.createWithDefaults ? undefined : testConfig,
|
testConfig.createWithDefaults ? undefined : testConfig,
|
||||||
);
|
);
|
||||||
expect(sess?.memberships.length).toEqual(1);
|
expect(sess?.memberships.length).toEqual(1);
|
||||||
expect(sess?.memberships[0].sessionDescription.id).toEqual("");
|
expect(sess?.memberships[0].slotDescription.id).toEqual("");
|
||||||
expect(sess?.memberships[0].scope).toEqual("m.room");
|
expect(sess?.memberships[0].scope).toEqual("m.room");
|
||||||
expect(sess?.memberships[0].application).toEqual("m.call");
|
expect(sess?.memberships[0].application).toEqual("m.call");
|
||||||
expect(sess?.memberships[0].deviceId).toEqual("AAAAAAA");
|
expect(sess?.memberships[0].deviceId).toEqual("AAAAAAA");
|
||||||
expect(sess?.memberships[0].isExpired()).toEqual(false);
|
expect(sess?.memberships[0].isExpired()).toEqual(false);
|
||||||
expect(sess?.sessionDescription.id).toEqual("");
|
expect(sess?.slotDescription.id).toEqual("");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("ignores memberships where application is not m.call", () => {
|
it("ignores memberships where application is not m.call", () => {
|
||||||
@@ -135,7 +135,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
application: "not-m.call",
|
application: "not-m.call",
|
||||||
});
|
});
|
||||||
const mockRoom = makeMockRoom([testMembership], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([testMembership], testConfig.testCreateSticky);
|
||||||
const sess = MatrixRTCSession.sessionForRoom(
|
const sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -150,7 +150,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
scope: "m.room",
|
scope: "m.room",
|
||||||
});
|
});
|
||||||
const mockRoom = makeMockRoom([testMembership], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([testMembership], testConfig.testCreateSticky);
|
||||||
const sess = MatrixRTCSession.sessionForRoom(
|
const sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -167,7 +167,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
const mockRoom = makeMockRoom([membershipTemplate, expiredMembership], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([membershipTemplate, expiredMembership], testConfig.testCreateSticky);
|
||||||
|
|
||||||
jest.advanceTimersByTime(2000);
|
jest.advanceTimersByTime(2000);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -181,7 +181,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
it("ignores memberships events of members not in the room", () => {
|
it("ignores memberships events of members not in the room", () => {
|
||||||
const mockRoom = makeMockRoom([membershipTemplate], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([membershipTemplate], testConfig.testCreateSticky);
|
||||||
mockRoom.hasMembershipState.mockImplementation((state) => state === KnownMembership.Join);
|
mockRoom.hasMembershipState.mockImplementation((state) => state === KnownMembership.Join);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -194,7 +194,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
// Force the sender to be undefined.
|
// Force the sender to be undefined.
|
||||||
const mockRoom = makeMockRoom([{ ...membershipTemplate, user_id: "" }], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([{ ...membershipTemplate, user_id: "" }], testConfig.testCreateSticky);
|
||||||
mockRoom.hasMembershipState.mockImplementation((state) => state === KnownMembership.Join);
|
mockRoom.hasMembershipState.mockImplementation((state) => state === KnownMembership.Join);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -210,7 +210,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
expiredMembership.created_ts = 500;
|
expiredMembership.created_ts = 500;
|
||||||
expiredMembership.expires = 1000;
|
expiredMembership.expires = 1000;
|
||||||
const mockRoom = makeMockRoom([expiredMembership], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([expiredMembership], testConfig.testCreateSticky);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -222,7 +222,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
|
|
||||||
it("returns empty session if no membership events are present", () => {
|
it("returns empty session if no membership events are present", () => {
|
||||||
const mockRoom = makeMockRoom([], testConfig.testCreateSticky);
|
const mockRoom = makeMockRoom([], testConfig.testCreateSticky);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -258,7 +258,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
} as unknown as EventTimeline);
|
} as unknown as EventTimeline);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -294,7 +294,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
} as unknown as EventTimeline);
|
} as unknown as EventTimeline);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -307,7 +307,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
const testMembership = Object.assign({}, membershipTemplate);
|
const testMembership = Object.assign({}, membershipTemplate);
|
||||||
(testMembership.device_id as string | undefined) = undefined;
|
(testMembership.device_id as string | undefined) = undefined;
|
||||||
const mockRoom = makeMockRoom([testMembership]);
|
const mockRoom = makeMockRoom([testMembership]);
|
||||||
const sess = MatrixRTCSession.sessionForRoom(
|
const sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -320,7 +320,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
const testMembership = Object.assign({}, membershipTemplate);
|
const testMembership = Object.assign({}, membershipTemplate);
|
||||||
(testMembership.call_id as string | undefined) = undefined;
|
(testMembership.call_id as string | undefined) = undefined;
|
||||||
const mockRoom = makeMockRoom([testMembership]);
|
const mockRoom = makeMockRoom([testMembership]);
|
||||||
sess = MatrixRTCSession.sessionForRoom(
|
sess = MatrixRTCSession.sessionForSlot(
|
||||||
client,
|
client,
|
||||||
mockRoom,
|
mockRoom,
|
||||||
callSession,
|
callSession,
|
||||||
@@ -347,7 +347,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Expect for there to be one membership as the state has been merged down.
|
// Expect for there to be one membership as the state has been merged down.
|
||||||
sess = MatrixRTCSession.sessionForRoom(client, mockRoom, callSession, {
|
sess = MatrixRTCSession.sessionForSlot(client, mockRoom, callSession, {
|
||||||
listenForStickyEvents: true,
|
listenForStickyEvents: true,
|
||||||
listenForMemberStateEvents: true,
|
listenForMemberStateEvents: true,
|
||||||
});
|
});
|
||||||
@@ -377,7 +377,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
return [ev as StickyMatrixEvent];
|
return [ev as StickyMatrixEvent];
|
||||||
});
|
});
|
||||||
|
|
||||||
sess = MatrixRTCSession.sessionForRoom(client, mockRoom, callSession, {
|
sess = MatrixRTCSession.sessionForSlot(client, mockRoom, callSession, {
|
||||||
listenForStickyEvents: true,
|
listenForStickyEvents: true,
|
||||||
listenForMemberStateEvents: true,
|
listenForMemberStateEvents: true,
|
||||||
});
|
});
|
||||||
@@ -385,7 +385,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
const memberships = sess.memberships;
|
const memberships = sess.memberships;
|
||||||
expect(memberships.length).toEqual(2);
|
expect(memberships.length).toEqual(2);
|
||||||
expect(memberships[0].sender).toEqual(stickyUserId);
|
expect(memberships[0].sender).toEqual(stickyUserId);
|
||||||
expect(memberships[0].sessionDescription.id).toEqual("");
|
expect(memberships[0].slotDescription.id).toEqual("");
|
||||||
expect(memberships[0].scope).toEqual("m.room");
|
expect(memberships[0].scope).toEqual("m.room");
|
||||||
expect(memberships[0].application).toEqual("m.call");
|
expect(memberships[0].application).toEqual("m.call");
|
||||||
expect(memberships[0].deviceId).toEqual("AAAAAAA");
|
expect(memberships[0].deviceId).toEqual("AAAAAAA");
|
||||||
@@ -394,13 +394,13 @@ describe("MatrixRTCSession", () => {
|
|||||||
// Then state
|
// Then state
|
||||||
expect(memberships[1].sender).toEqual(membershipTemplate.user_id);
|
expect(memberships[1].sender).toEqual(membershipTemplate.user_id);
|
||||||
|
|
||||||
expect(sess?.sessionDescription.id).toEqual("");
|
expect(sess?.slotDescription.id).toEqual("");
|
||||||
});
|
});
|
||||||
it("handles an incoming sticky event to an existing session", () => {
|
it("handles an incoming sticky event to an existing session", () => {
|
||||||
const mockRoom = makeMockRoom([membershipTemplate]);
|
const mockRoom = makeMockRoom([membershipTemplate]);
|
||||||
const stickyUserId = "@stickyev:user.example";
|
const stickyUserId = "@stickyev:user.example";
|
||||||
|
|
||||||
sess = MatrixRTCSession.sessionForRoom(client, mockRoom, callSession, {
|
sess = MatrixRTCSession.sessionForSlot(client, mockRoom, callSession, {
|
||||||
listenForStickyEvents: true,
|
listenForStickyEvents: true,
|
||||||
listenForMemberStateEvents: true,
|
listenForMemberStateEvents: true,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -116,16 +116,13 @@ export class MatrixRTCSessionManager extends TypedEventEmitter<MatrixRTCSessionM
|
|||||||
};
|
};
|
||||||
|
|
||||||
private readonly onEvent = (event: MatrixEvent): void => {
|
private readonly onEvent = (event: MatrixEvent): void => {
|
||||||
if (!event.unstableStickyExpiresAt) {
|
if (!event.unstableStickyExpiresAt) return; // Not sticky, not interested.
|
||||||
return; // Not sticky, not interested.
|
|
||||||
}
|
if (event.getType() !== EventType.GroupCallMemberPrefix) return;
|
||||||
if (event.getType() !== EventType.GroupCallMemberPrefix) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const room = this.client.getRoom(event.getRoomId());
|
const room = this.client.getRoom(event.getRoomId());
|
||||||
if (!room) {
|
if (!room) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.refreshRoom(room);
|
this.refreshRoom(room);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1058,18 +1058,12 @@ export class StickyEventMembershipManager extends MembershipManager {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
protected actionUpdateFromErrors(
|
protected actionUpdateFromErrors(e: unknown, t: MembershipActionType, m: string): ActionUpdate | undefined {
|
||||||
error: unknown,
|
const mappedMethod = new Map([
|
||||||
type: MembershipActionType,
|
["sendStateEvent", "_unstable_sendStickyEvent"],
|
||||||
method: string,
|
["_unstable_sendDelayedStateEvent", "_unstable_sendStickyDelayedEvent"],
|
||||||
): ActionUpdate | undefined {
|
]).get(m);
|
||||||
// Override method name.
|
return super.actionUpdateFromErrors(e, t, mappedMethod ?? "unknown method");
|
||||||
if (method === "sendStateEvent") {
|
|
||||||
method = "_unstable_sendStickyEvent";
|
|
||||||
} else if (method === "_unstable_sendDelayedStateEvent") {
|
|
||||||
method = "_unstable_sendStickyDelayedEvent";
|
|
||||||
}
|
|
||||||
return super.actionUpdateFromErrors(error, type, method);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected makeMyMembership(expires: number): SessionMembershipData | RtcMembershipData {
|
protected makeMyMembership(expires: number): SessionMembershipData | RtcMembershipData {
|
||||||
|
|||||||
Reference in New Issue
Block a user