From 3f5a994a2489f6714bf50ca4da09a2fc63a9987b Mon Sep 17 00:00:00 2001 From: Johannes Marbach Date: Tue, 18 Jun 2024 10:14:48 +0200 Subject: [PATCH] Add via parameter for MSC4156 (#4247) * Add via parameter for MSC4156 Signed-off-by: Johannes Marbach * Always include both parameters * Fix tests --------- Signed-off-by: Johannes Marbach --- spec/integ/matrix-client-methods.spec.ts | 2 +- src/client.ts | 16 ++++++++++++---- src/feature.ts | 4 ++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/spec/integ/matrix-client-methods.spec.ts b/spec/integ/matrix-client-methods.spec.ts index 06986652d48..c321403d591 100644 --- a/spec/integ/matrix-client-methods.spec.ts +++ b/spec/integ/matrix-client-methods.spec.ts @@ -257,7 +257,7 @@ describe("MatrixClient", function () { .when("POST", "/knock/" + encodeURIComponent(roomId)) .check((request) => { expect(request.data).toEqual({ reason: opts.reason }); - expect(request.queryParams).toEqual({ server_name: opts.viaServers }); + expect(request.queryParams).toEqual({ server_name: opts.viaServers, via: opts.viaServers }); }) .respond(200, { room_id: roomId }); diff --git a/src/client.ts b/src/client.ts index 1e3c57783cf..40a9e5d89b7 100644 --- a/src/client.ts +++ b/src/client.ts @@ -4319,9 +4319,13 @@ export class MatrixClient extends TypedEventEmitter(Method.Post, url); } - const queryString: Record = {}; + let queryParams: QueryDict = {}; if (opts.viaServers) { - queryString["server_name"] = opts.viaServers; + queryParams.server_name = opts.viaServers; + queryParams.via = opts.viaServers; + if (this.canSupport.get(Feature.MigrateServerNameToVia) === ServerSupport.Unstable) { + queryParams = replaceParam("via", "org.matrix.msc4156.via", queryParams); + } } const data: IJoinRequestBody = {}; @@ -4331,7 +4335,7 @@ export class MatrixClient extends TypedEventEmitter(Method.Post, path, queryString, data); + const res = await this.http.authedRequest<{ room_id: string }>(Method.Post, path, queryParams, data); const roomId = res.room_id; // In case we were originally given an alias, check the room cache again @@ -4364,9 +4368,13 @@ export class MatrixClient extends TypedEventEmitter = {}; + let queryParams: QueryDict = {}; if (opts.viaServers) { queryParams.server_name = opts.viaServers; + queryParams.via = opts.viaServers; + if (this.canSupport.get(Feature.MigrateServerNameToVia) === ServerSupport.Unstable) { + queryParams = replaceParam("via", "org.matrix.msc4156.via", queryParams); + } } const body: Record = {}; diff --git a/src/feature.ts b/src/feature.ts index 01cadd8e87c..0657a217cd5 100644 --- a/src/feature.ts +++ b/src/feature.ts @@ -33,6 +33,7 @@ export enum Feature { AccountDataDeletion = "AccountDataDeletion", RelationsRecursion = "RelationsRecursion", IntentionalMentions = "IntentionalMentions", + MigrateServerNameToVia = "MigrateServerNameToVia", } type FeatureSupportCondition = { @@ -65,6 +66,9 @@ const featureSupportResolver: Record = { unstablePrefixes: ["org.matrix.msc3952_intentional_mentions"], matrixVersion: "v1.7", }, + [Feature.MigrateServerNameToVia]: { + unstablePrefixes: ["org.matrix.msc4156"], + }, }; export async function buildFeatureSupportMap(versions: IServerVersions): Promise> {