diff --git a/src/UrlParams.test.ts b/src/UrlParams.test.ts index 47da4cbc..acbc4678 100644 --- a/src/UrlParams.test.ts +++ b/src/UrlParams.test.ts @@ -305,6 +305,19 @@ describe("UrlParams", () => { }); }); + it("[lotus] sendNotificationType=none turns the preset notification off", () => { + expect( + computeUrlParams( + "?intent=start_call&widgetId=1234&parentUrl=parent.org&sendNotificationType=none", + ).sendNotificationType, + ).toBeUndefined(); + expect( + computeUrlParams( + "?intent=start_call&widgetId=1234&parentUrl=parent.org", + ).sendNotificationType, + ).toBe("notification"); + }); + it("accepts join_existing", () => { expect( computeUrlParams( diff --git a/src/UrlParams.ts b/src/UrlParams.ts index cc8a53d1..d47e1299 100644 --- a/src/UrlParams.ts +++ b/src/UrlParams.ts @@ -523,6 +523,14 @@ export const computeUrlParams = (search = "", hash = ""): UrlParams => { ...properties, ...intentPreset, ...pickBy(configuration, (v?: unknown) => v !== undefined), + // [lotus] `sendNotificationType=none` turns the intent preset's + // notification off. The host passes it for persistent voice channels and + // space rooms, where a call start must not @room-ping every member + // (LotusGuild/cinny#295). pickBy above drops undefined, so it can't be + // expressed as a plain override. + ...(parser.getParam("sendNotificationType") === "none" + ? { sendNotificationType: undefined } + : {}), }; };