diff --git a/src/client.ts b/src/client.ts index 4824b9063b0..a54161d6df1 100644 --- a/src/client.ts +++ b/src/client.ts @@ -728,6 +728,11 @@ interface IRoomHierarchy { rooms: IHierarchyRoom[]; next_batch?: string; } + +interface ITimestampToEventResponse { + event_id: string; + origin_server_ts: string; +} /* eslint-enable camelcase */ // We're using this constant for methods overloading and inspect whether a variable @@ -8937,6 +8942,36 @@ export class MatrixClient extends EventEmitter { public async whoami(): Promise<{ user_id: string }> { // eslint-disable-line camelcase return this.http.authedRequest(undefined, Method.Get, "/account/whoami"); } + + /** + * Find the event_id closest to the given timestamp in the given direction. + * @return {Promise} A promise of an object containing the event_id and + * origin_server_ts of the closest event to the timestamp in the given + * direction + */ + public async timestampToEvent( + roomId: string, + timestamp: number, + dir: Direction, + ): Promise { + const path = utils.encodeUri("/rooms/$roomId/timestamp_to_event", { + $roomId: roomId, + }); + + return await this.http.authedRequest( + undefined, + Method.Get, + path, + { + ts: timestamp.toString(), + dir: dir, + }, + undefined, + { + prefix: "/_matrix/client/unstable/org.matrix.msc3030", + }, + ); + } } /**