diff --git a/spec/integ/matrix-client-event-timeline.spec.ts b/spec/integ/matrix-client-event-timeline.spec.ts index fe7393bfd..4bf36baa8 100644 --- a/spec/integ/matrix-client-event-timeline.spec.ts +++ b/spec/integ/matrix-client-event-timeline.spec.ts @@ -611,7 +611,12 @@ describe("MatrixClient event timelines", function() { return THREAD_ROOT; }); - httpBackend.when("GET", "/rooms/!foo%3Abar/relations/" + + httpBackend.when("GET", "/rooms/!foo%3Abar/event/" + encodeURIComponent(THREAD_ROOT.event_id!)) + .respond(200, function() { + return THREAD_ROOT; + }); + + httpBackend.when("GET", "/_matrix/client/v1/rooms/!foo%3Abar/relations/" + encodeURIComponent(THREAD_ROOT.event_id!) + "/" + encodeURIComponent(THREAD_RELATION_TYPE.name) + "?dir=b&limit=1") .respond(200, function() { @@ -650,7 +655,6 @@ describe("MatrixClient event timelines", function() { encodeURIComponent(THREAD_RELATION_TYPE.name) + "?dir=b&limit=1") .respond(200, function() { return { - original_event: THREAD_ROOT, chunk: [THREAD_REPLY], // no next batch as this is the oldest end of the timeline }; @@ -660,11 +664,17 @@ describe("MatrixClient event timelines", function() { await httpBackend.flushAllExpected(); const timelineSet = thread.timelineSet; - const timelinePromise = client.getEventTimeline(timelineSet, THREAD_REPLY.event_id!); - const timeline = await timelinePromise; + httpBackend.when("GET", "/rooms/!foo%3Abar/event/" + encodeURIComponent(THREAD_ROOT.event_id!)) + .respond(200, function() { + return THREAD_ROOT; + }); - expect(timeline!.getEvents().find(e => e.getId() === THREAD_ROOT.event_id!)).toBeTruthy(); - expect(timeline!.getEvents().find(e => e.getId() === THREAD_REPLY.event_id!)).toBeTruthy(); + const timelinePromise = client.getEventTimeline(timelineSet, THREAD_REPLY.event_id!); + const [timeline] = await Promise.all([timelinePromise, httpBackend.flushAllExpected()]); + + const eventIds = timeline!.getEvents().map(it => it.getId()); + expect(eventIds).toContain(THREAD_ROOT.event_id); + expect(eventIds).toContain(THREAD_REPLY.event_id); }); it("should return relevant timeline from non-thread timelineSet when asking for the thread root", async () => { @@ -1504,7 +1514,22 @@ describe("MatrixClient event timelines", function() { state: [], end: "end_token", }); - httpBackend.when("GET", "/rooms/!foo%3Abar/relations/" + + httpBackend.when("GET", "/rooms/!foo%3Abar/event/" + + encodeURIComponent(THREAD_ROOT.event_id!)) + .respond(200, function() { + return THREAD_ROOT; + }); + httpBackend.when("GET", "/rooms/!foo%3Abar/event/" + + encodeURIComponent(THREAD_ROOT.event_id!)) + .respond(200, function() { + return THREAD_ROOT; + }); + httpBackend.when("GET", "/rooms/!foo%3Abar/event/" + + encodeURIComponent(THREAD_ROOT.event_id!)) + .respond(200, function() { + return THREAD_ROOT; + }); + httpBackend.when("GET", "/_matrix/client/v1/rooms/!foo%3Abar/relations/" + encodeURIComponent(THREAD_ROOT.event_id!) + "/" + encodeURIComponent(THREAD_RELATION_TYPE.name) + buildParams(Direction.Backward, "start_token")) .respond(200, function() { @@ -1513,7 +1538,7 @@ describe("MatrixClient event timelines", function() { chunk: [], }; }); - httpBackend.when("GET", "/rooms/!foo%3Abar/relations/" + + httpBackend.when("GET", "/_matrix/client/v1/rooms/!foo%3Abar/relations/" + encodeURIComponent(THREAD_ROOT.event_id!) + "/" + encodeURIComponent(THREAD_RELATION_TYPE.name) + buildParams(Direction.Forward, "end_token")) .respond(200, function() { diff --git a/spec/integ/matrix-client-relations.spec.ts b/spec/integ/matrix-client-relations.spec.ts index 456db2efb..5a4fa2bd0 100644 --- a/spec/integ/matrix-client-relations.spec.ts +++ b/spec/integ/matrix-client-relations.spec.ts @@ -55,7 +55,10 @@ describe("MatrixClient relations", () => { const response = client!.relations(roomId, '$event-0', null, null); httpBackend! - .when("GET", "/rooms/!room%3Ahere/relations/%24event-0?dir=b") + .when("GET", "/rooms/!room%3Ahere/event/%24event-0") + .respond(200, null); + httpBackend! + .when("GET", "/_matrix/client/v1/rooms/!room%3Ahere/relations/%24event-0?dir=b") .respond(200, { chunk: [], next_batch: 'NEXT' }); await httpBackend!.flushAllExpected(); @@ -67,7 +70,10 @@ describe("MatrixClient relations", () => { const response = client!.relations(roomId, '$event-0', 'm.reference', null); httpBackend! - .when("GET", "/rooms/!room%3Ahere/relations/%24event-0/m.reference?dir=b") + .when("GET", "/rooms/!room%3Ahere/event/%24event-0") + .respond(200, null); + httpBackend! + .when("GET", "/_matrix/client/v1/rooms/!room%3Ahere/relations/%24event-0/m.reference?dir=b") .respond(200, { chunk: [], next_batch: 'NEXT' }); await httpBackend!.flushAllExpected(); @@ -78,10 +84,13 @@ describe("MatrixClient relations", () => { it("should read related events with relation type and event type", async () => { const response = client!.relations(roomId, '$event-0', 'm.reference', 'm.room.message'); + httpBackend! + .when("GET", "/rooms/!room%3Ahere/event/%24event-0") + .respond(200, null); httpBackend! .when( "GET", - "/rooms/!room%3Ahere/relations/%24event-0/m.reference/m.room.message?dir=b", + "/_matrix/client/v1/rooms/!room%3Ahere/relations/%24event-0/m.reference/m.room.message?dir=b", ) .respond(200, { chunk: [], next_batch: 'NEXT' }); @@ -98,10 +107,13 @@ describe("MatrixClient relations", () => { to: 'TO', }); + httpBackend! + .when("GET", "/rooms/!room%3Ahere/event/%24event-0") + .respond(200, null); httpBackend! .when( "GET", - "/rooms/!room%3Ahere/relations/%24event-0?dir=f&from=FROM&limit=10&to=TO", + "/_matrix/client/v1/rooms/!room%3Ahere/relations/%24event-0?dir=f&from=FROM&limit=10&to=TO", ) .respond(200, { chunk: [], next_batch: 'NEXT' }); diff --git a/src/@types/requests.ts b/src/@types/requests.ts index f9095455e..936ace5b4 100644 --- a/src/@types/requests.ts +++ b/src/@types/requests.ts @@ -153,7 +153,6 @@ export interface IRelationsRequestOpts { } export interface IRelationsResponse { - original_event: IEvent; chunk: IEvent[]; next_batch?: string; prev_batch?: string; diff --git a/src/client.ts b/src/client.ts index 42709446e..355a0af0e 100644 --- a/src/client.ts +++ b/src/client.ts @@ -5469,7 +5469,8 @@ export class MatrixClient extends TypedEventEmitter { const fetchedEventType = eventType ? this.getEncryptedIfNeededEventType(roomId, eventType) : null; - const result = await this.fetchRelations( - roomId, - eventId, - relationType, - fetchedEventType, - opts); + const [eventResult, result] = await Promise.all([ + this.fetchRoomEvent(roomId, eventId), + this.fetchRelations(roomId, eventId, relationType, fetchedEventType, opts), + ]); const mapper = this.getEventMapper(); - const originalEvent = result.original_event ? mapper(result.original_event) : undefined; + const originalEvent = eventResult ? mapper(eventResult) : undefined; let events = result.chunk.map(mapper); if (fetchedEventType === EventType.RoomMessageEncrypted) { @@ -7669,7 +7670,7 @@ export class MatrixClient extends TypedEventEmitter