From e2a2039aa8fd01adb1da4301224dd50d2dba5704 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Tue, 31 Oct 2023 17:15:54 +0000 Subject: [PATCH] Remove deprecated support for unstable MSC3882 (#3755) * Support for stable MSC3882 get_login_token * Make changes non-breaking by deprecation * Remove deprecated exports from MSC3882 stabilisation * Feat remove support for unstable MSC3882 * Remove bad line from rebase --- spec/integ/matrix-client-methods.spec.ts | 55 +----------------------- src/@types/auth.ts | 6 --- src/client.ts | 47 +++----------------- 3 files changed, 6 insertions(+), 102 deletions(-) diff --git a/spec/integ/matrix-client-methods.spec.ts b/spec/integ/matrix-client-methods.spec.ts index eb3578b9328..ae5ceb93e03 100644 --- a/spec/integ/matrix-client-methods.spec.ts +++ b/spec/integ/matrix-client-methods.spec.ts @@ -1204,73 +1204,20 @@ describe("MatrixClient", function () { describe("requestLoginToken", () => { it("should hit the expected API endpoint with UIA", async () => { - jest.spyOn(client.http, "getUrl"); - httpBackend - .when("GET", "/capabilities") - .respond(200, { capabilities: { "m.get_login_token": { enabled: true } } }); const response = {}; const uiaData = {}; const prom = client.requestLoginToken(uiaData); httpBackend.when("POST", "/v1/login/get_token", { auth: uiaData }).respond(200, response); await httpBackend.flush(""); expect(await prom).toStrictEqual(response); - expect(client.http.getUrl).toHaveLastReturnedWith( - expect.objectContaining({ - href: "http://alice.localhost.test.server/_matrix/client/v1/login/get_token", - }), - ); }); it("should hit the expected API endpoint without UIA", async () => { - jest.spyOn(client.http, "getUrl"); - httpBackend - .when("GET", "/capabilities") - .respond(200, { capabilities: { "m.get_login_token": { enabled: true } } }); - const response = { login_token: "xyz", expires_in_ms: 5000 }; - const prom = client.requestLoginToken(); - httpBackend.when("POST", "/v1/login/get_token", {}).respond(200, response); - await httpBackend.flush(""); - // check that expires_in has been populated for compatibility with r0 - expect(await prom).toStrictEqual({ ...response, expires_in: 5 }); - expect(client.http.getUrl).toHaveLastReturnedWith( - expect.objectContaining({ - href: "http://alice.localhost.test.server/_matrix/client/v1/login/get_token", - }), - ); - }); - - it("should still hit the stable endpoint when capability is disabled (but present)", async () => { - jest.spyOn(client.http, "getUrl"); - httpBackend - .when("GET", "/capabilities") - .respond(200, { capabilities: { "m.get_login_token": { enabled: false } } }); const response = { login_token: "xyz", expires_in_ms: 5000 }; const prom = client.requestLoginToken(); httpBackend.when("POST", "/v1/login/get_token", {}).respond(200, response); await httpBackend.flush(""); - // check that expires_in has been populated for compatibility with r0 - expect(await prom).toStrictEqual({ ...response, expires_in: 5 }); - expect(client.http.getUrl).toHaveLastReturnedWith( - expect.objectContaining({ - href: "http://alice.localhost.test.server/_matrix/client/v1/login/get_token", - }), - ); - }); - - it("should hit the r0 endpoint for fallback", async () => { - jest.spyOn(client.http, "getUrl"); - httpBackend.when("GET", "/capabilities").respond(200, {}); - const response = { login_token: "xyz", expires_in: 5 }; - const prom = client.requestLoginToken(); - httpBackend.when("POST", "/unstable/org.matrix.msc3882/login/token", {}).respond(200, response); - await httpBackend.flush(""); - // check that expires_in has been populated for compatibility with r1 - expect(await prom).toStrictEqual({ ...response, expires_in_ms: 5000 }); - expect(client.http.getUrl).toHaveLastReturnedWith( - expect.objectContaining({ - href: "http://alice.localhost.test.server/_matrix/client/unstable/org.matrix.msc3882/login/token", - }), - ); + expect(await prom).toStrictEqual(response); }); }); diff --git a/src/@types/auth.ts b/src/@types/auth.ts index 61b4f70aa03..66504630763 100644 --- a/src/@types/auth.ts +++ b/src/@types/auth.ts @@ -250,12 +250,6 @@ export interface LoginTokenPostResponse { * The token to use with `m.login.token` to authenticate. */ login_token: string; - /** - * Expiration in seconds. - * - * @deprecated this is only provided for compatibility with original revision of [MSC3882](https://github.com/matrix-org/matrix-spec-proposals/pull/3882). - */ - expires_in: number; /** * Expiration in milliseconds. */ diff --git a/src/client.ts b/src/client.ts index 0baa52f2134..7a1d997cc00 100644 --- a/src/client.ts +++ b/src/client.ts @@ -536,21 +536,11 @@ export interface IThreadsCapability extends ICapability {} export interface IGetLoginTokenCapability extends ICapability {} -/** - * @deprecated use {@link IGetLoginTokenCapability} instead - */ -export type IMSC3882GetLoginTokenCapability = IGetLoginTokenCapability; - export const GET_LOGIN_TOKEN_CAPABILITY = new NamespacedValue( "m.get_login_token", "org.matrix.msc3882.get_login_token", ); -/** - * @deprecated use {@link GET_LOGIN_TOKEN_CAPABILITY} instead - */ -export const UNSTABLE_MSC3882_CAPABILITY = GET_LOGIN_TOKEN_CAPABILITY; - export const UNSTABLE_MSC2666_SHARED_ROOMS = "uk.half-shot.msc2666"; export const UNSTABLE_MSC2666_MUTUAL_ROOMS = "uk.half-shot.msc2666.mutual_rooms"; export const UNSTABLE_MSC2666_QUERY_MUTUAL_ROOMS = "uk.half-shot.msc2666.query_mutual_rooms"; @@ -8045,50 +8035,23 @@ export class MatrixClient extends TypedEventEmitter> { - // use capabilities to determine which revision of the MSC is being used - const capabilities = await this.getCapabilities(); - - let endpoint: string; - if (capabilities[GET_LOGIN_TOKEN_CAPABILITY.name]) { - // use the stable endpoint - endpoint = `${ClientPrefix.V1}/login/get_token`; - } else if (capabilities[GET_LOGIN_TOKEN_CAPABILITY.altName!]) { - // newer unstable r1 endpoint - endpoint = `${ClientPrefix.Unstable}/org.matrix.msc3882/login/get_token`; - } else { - // old unstable r0 endpoint - endpoint = `${ClientPrefix.Unstable}/org.matrix.msc3882/login/token`; - } - const body: UIARequest<{}> = { auth }; - const res = await this.http.authedRequest>( + return this.http.authedRequest>( Method.Post, - endpoint, + "/login/get_token", undefined, // no query params body, - { prefix: "" }, + { prefix: ClientPrefix.V1 }, ); - - // the representation of expires_in changed from unstable revision 0 to unstable revision 1 so we cross populate - if ("login_token" in res) { - if (typeof res.expires_in_ms === "number") { - res.expires_in = Math.floor(res.expires_in_ms / 1000); - } else if (typeof res.expires_in === "number") { - res.expires_in_ms = res.expires_in * 1000; - } - } - - return res; } /**