From 82ca84bd63a59f7c2d1ebc4a6cee2c1ba0a2fadf Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Oct 2023 12:40:49 +0100 Subject: [PATCH 1/3] Avoid error when DMing oneself Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/createRoom.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/createRoom.ts b/src/createRoom.ts index fd2fd30764c..f1623f84eef 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -119,7 +119,9 @@ export default async function createRoom(client: MatrixClient, opts: IOpts): Pro const createOpts: ICreateRoomOpts = opts.createOpts || {}; createOpts.preset = createOpts.preset || defaultPreset; createOpts.visibility = createOpts.visibility || Visibility.Private; - if (opts.dmUserId && createOpts.invite === undefined) { + + // We allow UX of DMing ourselves as a form of creating a personal room but the server doesn't like this so strip it + if (opts.dmUserId && opts.dmUserId !== client.getUserId() && createOpts.invite === undefined) { switch (getAddressType(opts.dmUserId)) { case "mx-user-id": createOpts.invite = [opts.dmUserId]; From 26f5880835ea1a4832a6bba35406583a1a5e9642 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 17 Oct 2023 09:57:08 +0100 Subject: [PATCH 2/3] Update comment Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/createRoom.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/createRoom.ts b/src/createRoom.ts index f1623f84eef..4f79cb9c64a 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -120,7 +120,8 @@ export default async function createRoom(client: MatrixClient, opts: IOpts): Pro createOpts.preset = createOpts.preset || defaultPreset; createOpts.visibility = createOpts.visibility || Visibility.Private; - // We allow UX of DMing ourselves as a form of creating a personal room but the server doesn't like this so strip it + // We allow UX of DMing ourselves as a form of creating a personal room but the server throws + // an error when a user tries to invite themselves so we filter it out if (opts.dmUserId && opts.dmUserId !== client.getUserId() && createOpts.invite === undefined) { switch (getAddressType(opts.dmUserId)) { case "mx-user-id": From 7a6bb54e88b63a9ad6fd17e2fbaa3c9175770cdc Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 17 Oct 2023 09:59:49 +0100 Subject: [PATCH 3/3] Add test Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- test/createRoom-test.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/createRoom-test.ts b/test/createRoom-test.ts index 0cdc5dd7f90..a3d413e9823 100644 --- a/test/createRoom-test.ts +++ b/test/createRoom-test.ts @@ -142,6 +142,15 @@ describe("createRoom", () => { }), ); }); + + it("should strip self-invite", async () => { + await createRoom(client, { dmUserId: client.getSafeUserId() }); + expect(client.createRoom).toHaveBeenCalledWith( + expect.not.objectContaining({ + invite: expect.any(Array), + }), + ); + }); }); describe("canEncryptToAllUsers", () => {